I have a setup that looks like this:
// myDG is a DataGrid whose columns are DataGridTextColumn
ObservableCollection<MyItem> myOC;
// myOC is populated with some new MyItem
myDG.ItemsSource = myOC;
where MyItem
implements INotifyPropertyChanged
. What's the way to properly catch when the user inputs a value into a cell?
I've tried catching PropertyChanged
on the MyItem
s, but I also update the values periodically in the background (the idea is that when the user manually edits the value, a flag is triggered that tells the periodic calculation to avoid overwriting the manually entered data). So PropertyChanged
catches everything, including the periodic updates, which I don't want. I suppose it's possible to make this work (by setting a flag when I do the periodic calculation, then checking for absence of flag on the PropertyChanged event handler -- but I want to know if there's a simpler solution.)
I've tried catching myDG.CurrentCellChanged
but that's triggered every time the user changes the cell selection, not specifically when they edit cell contents.
Edit: Here is the 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>
Here is the MyItem
implementation (uses Fody/PropertyChanged):
[ImplementPropertyChanged]
class MyItem : INotifyPropertyChanged
{
public event PropertyChangedEventHandler PropertyChanged;
public string Prop1 { get; set; }
public string Prop2 { get; set; }
public MyItem()
{
Prop1 = Prop2 = "";
}
}