Mam instalację, która wygląda tak:WPF DataGrid wartość komórki zmienione zdarzenie
// myDG is a DataGrid whose columns are DataGridTextColumn
ObservableCollection<MyItem> myOC;
// myOC is populated with some new MyItem
myDG.ItemsSource = myOC;
gdzie MyItem
implementuje INotifyPropertyChanged
. W jaki sposób prawidłowo złapać, gdy użytkownik wprowadza wartość do komórki?
Próbowałem złapać PropertyChanged
na MyItem
s, ale również aktualizować wartości okresowo w tle (chodzi o to, że gdy użytkownik ręcznie edytuje wartość, zostaje wyzwolona flaga, która informuje okresowe obliczenia, aby uniknąć nadpisania ręcznie wprowadzone dane). Tak więc PropertyChanged
łapie wszystko, łącznie z okresowymi aktualizacjami, których nie chcę. Przypuszczam, że można to wykonać (ustawiając flagę podczas wykonywania okresowych obliczeń, a następnie sprawdzając brak flagi na module obsługi zdarzenia PropertyChanged - ale chcę wiedzieć, czy jest prostsze rozwiązanie.)
I "Próbowałem złapać myDG.CurrentCellChanged
, ale to jest wyzwalane za każdym razem, gdy użytkownik zmienia wybór komórki, a nie kiedy edytuje zawartość komórki.
Edycja: Oto 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>
Oto realizacja MyItem
(używa Fody/PropertyChanged):
[ImplementPropertyChanged]
class MyItem : INotifyPropertyChanged
{
public event PropertyChangedEventHandler PropertyChanged;
public string Prop1 { get; set; }
public string Prop2 { get; set; }
public MyItem()
{
Prop1 = Prop2 = "";
}
}
możesz pokazać swoją implementację XAML. –
Po prostu zmień metodę ustawiania? –
Czy spojrzałeś na listę wydarzeń ujawnionych przez DataGrid? https://msdn.microsoft.com/en-us/library/system.windows.controls.datagrid_events(v=vs.100).aspx – AnjumSKhan