1

我已经完成了一些WPF项目,并且看到相同的问题弹出,这是聚合/组合依赖项属性(dp)的“问题”。组合依赖项属性

例如,我有10个类型为bool的dp,我想将它们组合并公开为独立的dp。除非一个或多个成分是假的,否则合并的dp是正确的。

我目前这样做使用addValueChanged注册每个10(!()dp的回调,但我想知道是否有更优雅的解决方案或可能是一个框架,解决这个常见的情况。和MVVM光了,但是我想它可以在这里非常有用。

 var dpd = DependencyPropertyDescriptor.FromProperty(property, 
                  owner.GetType()); 
     dpd.AddValueChanged(owner, 
          handler); 

回答

5

在ReactiveUI是这样的:

// etc all the way to ten 
this.WhenAny(x => x.PropOne, x => PropTwo, x => x.PropThree, 
    (one,two,three) => one && two && three) 
    .Subscribe(x => FinalProp = x); 
0

DependencyProperties工作基础上正规属性。

每次根源之一,定期布尔属性中设置好的,你可以提高OnPropertyChanged对于“组合”布尔属性也是如此。

组合布尔属性的getter应评估根布尔属性。

0

不确定它是否更优雅,但是对于每个单独的道具(1 ... 10),您都有一个setter。

里面每个Set,你可以调用(与卡利微语法)

OnPropertyChanged(() => depPropN);  // where N = 1 ..... 10 
OnPropertyChanged(() => combinedDepProp); 
+0

您还可以覆盖的CM'OnNotifyPropertyChanged'的对象并检查属性名对于不断变化的道具,如果某个属性正在改变,你可以为相关道具提出一个属性更改通知。我发现这对我的属性getter/setter代码看起来不那么混乱 – Charleh