wpf – 逻辑上组合依赖项属性
发布时间:2020-12-13 20:47:39 所属栏目:百科 来源:网络整理
导读:我正在使用C#4.0并创建了一个DependencyObject MyView. 在MyView中,我有两个DependencyProperties,PropA和PropB,两者都是布尔值. 我想要第三个DependencyProperty,PropC,也是一个bool,简单地说,应该总是给我(PropA || PropB). 实现这一目标的最佳方法是什么
我正在使用C#4.0并创建了一个DependencyObject MyView.
在MyView中,我有两个DependencyProperties,PropA和PropB,两者都是布尔值. 我想要第三个DependencyProperty,PropC,也是一个bool,简单地说,应该总是给我(PropA || PropB). >实现这一目标的最佳方法是什么?
您可以使用PropA和PropB的Dependency Property更改回调来设置PropC的值(不要使用CLR属性包装器作为依赖项属性,因为它们永远不会被保证被调用).
如果你有这三个DP public static readonly DependencyProperty PropAProperty = DependencyProperty.Register("PropA",typeof(bool),typeof(MyView),new PropertyMetadata(false,PropAPropertyChanged)); public static readonly DependencyProperty PropBProperty = DependencyProperty.Register("PropB",PropBPropertyChanged)); public static readonly DependencyProperty PropCProperty = DependencyProperty.Register("PropC",new PropertyMetadata(false)); public bool PropA { get { return (bool)this.GetValue(PropAProperty); } set { this.SetValue(PropAProperty,value); } } public bool PropB { get { return (bool)this.GetValue(PropBProperty); } set { this.SetValue(PropBProperty,value); } } public bool PropC { get { return (bool)this.GetValue(PropCProperty); } set { this.SetValue(PropCProperty,value); } } 你可以像这样使用属性更改回调 private static void PropAPropertyChanged(DependencyObject source,DependencyPropertyChangedEventArgs e) { MyView myView = source as MyView; myView.OnPropChanged(); } private static void PropBPropertyChanged(DependencyObject source,DependencyPropertyChangedEventArgs e) { MyView myView = source as MyView; myView.OnPropChanged(); } public void OnPropChanged() { PropC = PropA || PropB; } 这样,每次PropA或PropB更改时,您都将始终更新PropC的值 此外,PropC不需要是DP,如果您实现INotifyPropertyChanged,它可以是正常的CLR属性.然后,实现可以看起来像这样 public void OnPropChanged() { OnPropertyChanged("PropC"); } public bool PropC { get { return PropA || PropB; } } public event PropertyChangedEventHandler PropertyChanged; private void OnPropertyChanged(string propertyName) { if (PropertyChanged != null) { PropertyChanged(this,new PropertyChangedEventArgs(propertyName)); } } 您还可以使用MultiBinding将PropC绑定到PropA和PropB.如果您想要一个这样的例子,请告诉我 (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |