WPF データグリッド (WPF ツールキット) のセルの編集テンプレートに問題があります。テンプレートは ComboBox で構築され、ComboBox の ItemsSource は実行時に読み込まれます。
これは平均的なコードです...
<ObjectDataProvider x:Key="dataValuesProvider" MethodName="GetValues" />
<toolkit:DataGrid
ItemsSource="{Binding Path=MyItems}">
<toolkit:DataGridTemplateColumn
Header="Property1">
<toolkit:DataGridTemplateColumn.CellTemplate>
<DataTemplate>
<TextBlock Text="{Binding Path=Property1, ValidatesOnDataErrors=true}"/>
</DataTemplate>
</toolkit:DataGridTemplateColumn.CellTemplate>
<toolkit:DataGridTemplateColumn.CellEditingTemplate>
<DataTemplate>
<ComboBox
SelectedValue="{Binding Path=Property1, UpdateSourceTrigger=PropertyChanged, ValidatesOnDataErrors=True}"
IsEditable="True"
IsSynchronizedWithCurrentItem="False"
ItemsSource="{Binding Source={StaticResource dataValuesProvider}, Mode=OneWay}"
/>
</DataTemplate>
</toolkit:DataGridTemplateColumn.CellEditingTemplate>
</toolkit:DataGridTemplateColumn></toolkit:DataGrid>
今、私はこの問題を抱えています。
行ごとに異なる値で dataValuesProvider を更新する必要があります。次に、datagrid の selectionchanged イベントで dataValuesProvider (dataValuesProvider=null) のリセットを挿入しました。
( dataValuesProvider は、選択した行の特定のセルに入力した後にロードされます)。
これが問題です: dataValuesProvider を (新しい行の selectionchanged で) リセットすると、ComboBox の SelectedValue が変更され、前の行の Property1 がクリアされます。
セルの編集テンプレートは、セルを編集するまでバインディングの関連付けを更新しないため、この動作があると思います。それはそうです?
この問題を回避するにはどうすればよいですか?