我的设置看起来像这样:
// myDG is a DataGrid whose columns are DataGridTextColumn
ObservableCollection<MyItem> myOC;
// myOC is populated with some new MyItem
myDG.ItemsSource = myOC;
MyItem
实现了 INotifyPropertyChanged
接口。正确的方法是如何捕获用户输入单元格值的?
我尝试在 MyItem
上捕获 PropertyChanged
,但我也会定期后台更新值(想法是当用户手动编辑值时,触发一个标志,告诉周期性计算避免覆盖手动输入的数据)。因此,PropertyChanged
捕获了所有东西,包括我不想要的周期性更新。我想可能可以让它工作(通过在进行周期性计算时设置标志,然后在 PropertyChanged 事件处理程序上检查缺少标志--但我想知道是否有更简单的解决方案)。
我尝试捕获 myDG.CurrentCellChanged
,但每次用户更改单元格选择时都会触发,而不是特定地编辑单元格内容时触发。
编辑:这是 XAML:
<DataGrid x:Name="myDG" ItemsSource="{Binding}" AutoGenerateColumns="False" Margin="10,10,182,0" VerticalAlignment="Top" Height="329" ClipboardCopyMode="IncludeHeader">
<DataGrid.Columns>
<DataGridTextColumn Header="Col1" Binding="{Binding Prop1}" IsReadOnly="True"/>
<DataGridTextColumn Header="Col2" Binding="{Binding Prop2}" IsReadOnly="False"/>
</DataGrid.Columns>
</DataGrid>
这是 MyItem
的实现(使用了 Fody/PropertyChanged):
[ImplementPropertyChanged]
class MyItem : INotifyPropertyChanged
{
public event PropertyChangedEventHandler PropertyChanged;
public string Prop1 { get; set; }
public string Prop2 { get; set; }
public MyItem()
{
Prop1 = Prop2 = "";
}
}