我正在使用C#4.0,并创建了DependencyObject MyView。
在MyView中,我有两个DependencyProperty,即PropA和PropB,它们都是 bool 值。
我想要第三个DependencyProperty,PropC和bool,简单地说,应该总是给我(PropA || PropB)。
最佳答案
您可以为PropA和PropB使用Dependency Property更改的回调来设置PropC的值(不要将CLR属性包装器用于Dependency Properties,因为它们永远不能被调用)。
如果您有这三个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",
typeof(bool),
typeof(MyView),
new PropertyMetadata(false, PropBPropertyChanged));
public static readonly DependencyProperty PropCProperty =
DependencyProperty.Register("PropC",
typeof(bool),
typeof(MyView),
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;
}
这样,每次
PropC
或PropA
更改时,您将始终更新PropB
的值另外,
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));
}
}
您还可以使用
PropC
将PropA
绑定(bind)到PropB
和MultiBinding
。让我知道您是否也想举个例子关于wpf - 逻辑上合并依赖项属性,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/4741130/