【发布时间】:2016-03-29 03:57:40
【问题描述】:
我的设置如下所示:
// myDG is a DataGrid whose columns are DataGridTextColumn
ObservableCollection<MyItem> myOC;
// myOC is populated with some new MyItem
myDG.ItemsSource = myOC;
其中MyItem 实现INotifyPropertyChanged。当 user 向单元格输入值时,正确捕获的方法是什么?
我已经尝试在MyItems 上捕获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 = "";
}
}
【问题讨论】:
-
你能展示你的 XAML 实现吗?
-
只是改变setter方法?
-
您查看过 DataGrid 公开的事件列表吗? msdn.microsoft.com/en-us/library/…