1

我现在已经完成了几个 WPF 项目,并且看到了同样的问题,那就是聚合/组合依赖属性(dp)的“问题”。

例如,我有 10 个 bool 类型的 dp,我想将它们组合并作为单独的 dp 公开。组合的 dp 为真,除非它的一个或多个成分为假。

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

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

3 回答 3

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);
于 2013-01-08T05:23:49.910 回答
0

DependencyProperties 基于常规属性工作。

每次设置根常规 bool 属性之一时,您也可以为“组合”bool 属性提高 OnPropertyChanged。

组合 bool 属性的 getter 应评估根 bool 属性。

于 2013-01-07T13:18:20.320 回答
0

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

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

OnPropertyChanged(() => depPropN);      // where N = 1 ..... 10
OnPropertyChanged(() => combinedDepProp);
于 2013-01-07T13:25:15.620 回答