更新绑定到依赖属性的 UI
本文关键字:UI 属性 依赖 绑定 更新 | 更新日期: 2023-09-27 17:55:36
>我有几个属性,它们返回依赖于另一个属性的值的值。 更新绑定到依赖属性的 UI 的最佳方法是什么?请参阅下面的示例,当子集合中的 Quantity 更改时,如何更新绑定到 Parent 对象的 TotalQuantity 属性的 UI 元素?
public class Child : INotifyPropertyChanged
{
private int quantity;
public int Quantity
{
get
{
return quantity;
}
set
{
quantity = value;
OnPropertyChanged("Quantity");
}
}
public event PropertyChangedEventHandler PropertyChanged;
protected virtual void OnPropertyChanged(string propertyName)
{
this.VerifyPropertyName(propertyName);
if (this.PropertyChanged != null)
{
var e = new PropertyChangedEventArgs(propertyName);
this.PropertyChanged(this, e);
}
}
}
public class ParentObject : INotifyPropertyChanged
{
private ObservableCollection<Child> children;
public ObservableCollection<Child> Children
{
get
{
return children;
}
set
{
children = value;
OnPropertyChanged("Children");
}
}
public int TotalQuantity
{
get
{
return Children.Sum(c => c.Quantity);
}
}
public event PropertyChangedEventHandler PropertyChanged;
protected virtual void OnPropertyChanged(string propertyName)
{
this.VerifyPropertyName(propertyName);
if (this.PropertyChanged != null)
{
var e = new PropertyChangedEventArgs(propertyName);
this.PropertyChanged(this, e);
}
}
}
当你实例化你的ObservableCollection
时,你需要订阅CollectionChanged
事件。
Children.CollectionChanged += Children_CollectionChanged;
当从集合中添加/删除项时,将调用此值。您只需要通知TotalQuantity
已更改即可。
void Children_CollectionChanged(object sender, System.Collections.Specialized.NotifyCollectionChangedEventArgs e)
{
OnPropertyChanged("TotalQuantity");
}
如果需要在子项更改时更新 UI 上的 TotalQuantity
属性,则只需订阅子项的PropertyChanged
事件。
因此,当您将项目添加到集合时,请订阅事件:
Child myChild = new Child(); //Just an example, but you get the idea
myChild.PropertyChanged += myChild_PropertyChanged;
在事件处理程序中,您可以测试以查看更改了哪些属性。
void myChild_PropertyChanged(object sender, System.ComponentModel.PropertyChangedEventArgs e)
{
if (e.PropertyName == "Quantity")
OnPropertyChanged("TotalQuantity");
}
或者,你可以打电话给OnPropertyChanged
而不检查你是否是一个坏蛋。但我不推荐它,以防万一您的模型将来获得更多属性。
从集合中删除子项之前,不要忘记取消订阅事件。