この質問の背景/コンテキスト: WPF デスクトップ アプリケーションがあります。LINQ to SQL を使用して SQL データベースに接続し、データを WPF Datagrids に表示します。かなりうまく機能していましたが、LINQ は非常に遅くなる可能性があるため、パフォーマンスに問題がありました。そのため、ロジックと UI コントロールを LINQ データベース コンテキストからできるだけ離し、代わりにローカル変数にロードしています。パフォーマンスを大幅に向上させる LINQ オブジェクト。
問題: Datagrid をテストしていると、ある Datagridの特定の (整数) 列の値を編集しようとすると、「双方向バインディングにはパスまたは XPath が必要です」という新しい例外が発生します。正常に動作しています。なぜこれを取得しているのか、どうすればよいのかわかりません。
そのため、datagrid.datacontext が LINQ エンティティ アソシエーションに設定されている場合は機能しましたが、プレーン オブジェクトのリストに設定されている場合にのみほとんど機能します。リストを ObservableCollection に変更しようとしましたが、明らかな効果はありませんでした。
ここや他のサイトで関連するさまざまな質問を見てきましたが、役立つと思われるものは何も見当たりません.
現在私は持っています:
<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 時間の遅延後に許可したときに投稿します。