この質問の背景/文脈: 私はWPFデスクトップアプリケーションを持っています。 LINQ to SQLを使用してSQLデータベースに接続し、そのデータをWPF Datagridに表示します。 LINQが致命的に遅くなる可能性があるため、パフォーマンスは問題ありませんでした。そのため、ロジックとUIコントロールをできるだけLINQデータベースのコンテキストから切り離し、代わりにそれらを非常に類似したローカル変数にロードしていますパフォーマンスを大幅に向上させるLINQオブジェクト。WPFデータグリッドで「双方向バインディングにパスまたはXPathが必要」という例外を修正するにはどうすればよいですか?
問題: 私はDataGridのテストとして、私は今、新しい例外を取得しています「が結合双方向のパスやXPathを必要と。」私は、特定の(整数で値を編集しようとすると、 )列を編集していましたが、文字列の編集はうまくいきました。私はなぜこれを取得しているのか、それについて何をすべきか理解していません。
datagrid.datacontextは、LINQのエンティティの関連に設定したときに、それは働いたが、それはプレーンなオブジェクトのリストに設定されている場合にのみ、ほとんど機能します。私はObservableCollectionにリストを変更しようとしましたが、これは明らかな効果はありませんでした。
私はここや他のサイトで約12種類の関連する質問を見てきましたが、助けていると思われるものは何も見ていません。
現在、私が持っている:
<DataGrid Margin="12,110,12,0" x:Name="dgDays" ItemsSource="{Binding}"
Height="165" VerticalAlignment="Top" MinHeight="0"
AutoGenerateColumns="False"
SelectionChanged="dgDays_SelectionChanged">
...
コードに縛られる<DataGrid.Columns>
<DataGridComboBoxColumn Width="80" Header="Cook" x:Name="_DailyCookCombo" SelectedItemBinding="{Binding sCook}"/>
<DataGridComboBoxColumn Width="80" Header="Eat" x:Name="_DailyDayCombo" SelectedItemBinding="{Binding sDay}"/>
<DataGridTextColumn Width="52" Header="Prot" Binding="{Binding Protein}" />
<DataGridTextColumn Width="52" Header="Carb" Binding="{Binding Carb}" />
<DataGridTextColumn Width="52" Header="Fat" Binding="{Binding Fat}" />
<DataGridTextColumn Width="62" Header="Prot %" Binding="{Binding ProteinPercent}" />
<DataGridTextColumn Width="62" Header="Carb %" Binding="{Binding CarbPercent}" />
<DataGridTextColumn Width="62" Header="Fat %" Binding="{Binding FatPercent}" />
<DataGridTextColumn Width="116" Header="non PFW meals" Binding="{Binding NonPFWMeals}" />
<DataGridTextColumn Width="55" Header="Prot" Binding="{Binding CalcProt}" IsReadOnly="True" />
<DataGridTextColumn Width="55" Header="Carb" Binding="{Binding CalcCarbs}" IsReadOnly="True" />
<DataGridTextColumn Width="55" Header="Fat" Binding="{Binding CalcFat}" IsReadOnly="True" />
<DataGridTextColumn Width="65" Header="KCal" Binding="{Binding CalcKCal}" IsReadOnly="True" />
<DataGridCheckBoxColumn Width="32" Header="Skip" Binding="{Binding Skip}" />
<DataGridTextColumn Width="70" Header="Date" Binding="{Binding sNextDate}" IsReadOnly="True" />
</DataGrid.Columns>
</DataGrid>
:
のように定義されてdgDays.DataContext = TheMember.RAM_Member_Requirements_Days;
:
public ObservableCollection<RAM_Member_Requirements_Day> RAM_Member_Requirements_Days = new ObservableCollection<RAM_Member_Requirements_Day>();
そのバインドされたメンバーである
:
public class RAM_Member_Requirements_Day : INotifyPropertyChanged
{
// RAM equivalents of DB values:
public System.Nullable<decimal> Protein;
public System.Nullable<decimal> Carb;
public System.Nullable<decimal> Fat;
public System.Nullable<decimal> ProteinPercent;
public System.Nullable<decimal> CarbPercent;
public System.Nullable<decimal> FatPercent;
public System.Nullable<int> NonPFWMeals;
public System.Nullable<bool> Skip;
public System.Nullable<System.DateTime> SkipDate;
私は、サイトがその8時間の遅延の後に私をすることができますときに私は投稿しますれ、すぐにこれを入力した後、非常に簡単な修正を見つけました。
これは不思議なことですが、これはフィールドにのみバインドできず、プロパティのみにバインドできないためです。理由の説明については、以下を参照してください:http://stackoverflow.com/questions/842575/why-does-wpf-support-binding-to-properties-of-an-object-but-not-fields – MatrixManAtYrService
@MatrixManAtYrServiceありがとう、それを読んだ後でも、それはまだ私には神秘的です。どうやら、フィールドとプロパティの定義と相違点を読んでみる必要があります。 – Dronz
Heh。さて、ちょっと読んで、私はフィールドとプロパティを使用していることを知っているC#を知らずに参照してください。興味深い、ありがとう。 – Dronz