当我修改数据网格项目中的值时如何处理事件?
How to handle the event when I modify value in the item of a datagrid?
我有一个数据网格。一列是一个复选框,我想在修改一行的复选框时处理。
我看过这段代码,乍一看它看起来是我要找的东西,但我有一些疑问。
public ObservableCollection<YourDataType> Items
{
get { return items; }
set { items = value; NotifyPropertyChanged("Items"); }
}
public YourDataType SelectedItem
{
get { return selectedItem; }
set { selectedItem = value; NotifyPropertyChanged("SelectedItem"); }
}
在视图模型构造函数中:
SelectedItem.PropertyChanged += SelectedItem_PropertyChanged;
在视图模型中:
private void SelectedItem_PropertyChanged(object sender, PropertyChangedEventArgs e)
{
// this will be called when any property value of the SelectedItem object changes
if (e.PropertyName == "YourPropertyName") DoSomethingHere();
else if (e.PropertyName == "OtherPropertyName") DoSomethingElse();
}
我怀疑在构造函数中它订阅了 selected 项目的事件,但是当我 select 中的另一行时 selected 项目被改变了数据网格。那么它只订阅一次吗?到哪一项?
此外,selected 项在构造函数时为 null,所以我猜我会得到一个 null 错误。
所以我真的不确定这是否真的是一个好的解决方案,如果是,我不明白为什么它可以工作。
当数据网格中的一项 属性 发生变化时,还有另一种解决方案可以处理吗?但乍一看,这个解决方案似乎简单明了。
谢谢。
您必须在 SelectedItem 中附加和分离事件处理程序 属性 setter:
public YourDataType SelectedItem
{
get { return selectedItem; }
set
{
if (selectedItem != null)
{
selectedItem.PropertyChanged -= SelectedItem_PropertyChanged;
}
selectedItem = value;
if (selectedItem != null)
{
selectedItem.PropertyChanged += SelectedItem_PropertyChanged;
}
NotifyPropertyChanged(nameof(SelectedItem));
}
}
我有一个数据网格。一列是一个复选框,我想在修改一行的复选框时处理。
我看过这段代码,乍一看它看起来是我要找的东西,但我有一些疑问。
public ObservableCollection<YourDataType> Items
{
get { return items; }
set { items = value; NotifyPropertyChanged("Items"); }
}
public YourDataType SelectedItem
{
get { return selectedItem; }
set { selectedItem = value; NotifyPropertyChanged("SelectedItem"); }
}
在视图模型构造函数中:
SelectedItem.PropertyChanged += SelectedItem_PropertyChanged;
在视图模型中:
private void SelectedItem_PropertyChanged(object sender, PropertyChangedEventArgs e)
{
// this will be called when any property value of the SelectedItem object changes
if (e.PropertyName == "YourPropertyName") DoSomethingHere();
else if (e.PropertyName == "OtherPropertyName") DoSomethingElse();
}
我怀疑在构造函数中它订阅了 selected 项目的事件,但是当我 select 中的另一行时 selected 项目被改变了数据网格。那么它只订阅一次吗?到哪一项?
此外,selected 项在构造函数时为 null,所以我猜我会得到一个 null 错误。
所以我真的不确定这是否真的是一个好的解决方案,如果是,我不明白为什么它可以工作。
当数据网格中的一项 属性 发生变化时,还有另一种解决方案可以处理吗?但乍一看,这个解决方案似乎简单明了。
谢谢。
您必须在 SelectedItem 中附加和分离事件处理程序 属性 setter:
public YourDataType SelectedItem
{
get { return selectedItem; }
set
{
if (selectedItem != null)
{
selectedItem.PropertyChanged -= SelectedItem_PropertyChanged;
}
selectedItem = value;
if (selectedItem != null)
{
selectedItem.PropertyChanged += SelectedItem_PropertyChanged;
}
NotifyPropertyChanged(nameof(SelectedItem));
}
}