合并依赖属性

时间:2013-01-07 12:49:35

标签: wpf mvvm-light dependency-properties caliburn.micro reactiveui

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

例如,我有10 dp的bool类型,我希望将其组合并作为单独的dp公开。除非一个或多个成分是假的,否则合并的dp是真的。

我目前使用addValueChanged执行此操作,该注册为10(!()dp中的每一个注册回调,但我想知道是否有更优雅的解决方案或可能是解决此常见方案的框架。我没有使用reactiveUI和mvvm还没亮,但我觉得它在这里很有用。

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

3 个答案:

答案 0 :(得分: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);

答案 1 :(得分:0)

DependencyProperties基于常规属性工作。

每次设置一个root,regular bool属性时,你可以为“组合”bool属性提高OnPropertyChanged。

组合bool属性的getter应该评估root bool属性。

答案 2 :(得分:0)

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

在每个Set内,您可以调用(使用Caliburn Micro语法)

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