Wpf 组合依赖项属性

Wpf 组合依赖项属性,wpf,mvvm-light,dependency-properties,caliburn.micro,reactiveui,Wpf,Mvvm Light,Dependency Properties,Caliburn.micro,Reactiveui,我现在已经做了几个WPF项目,看到同样的问题出现了,那就是聚合/组合依赖属性(dp)的“问题” 例如,我有10个类型为bool的dp,我想将其合并并作为单独的dp公开。组合dp为真,除非其一个或多个成分为假 我目前使用addValueChanged来实现这一点,它为10个(!()dp中的每一个注册一个回调,但我想知道是否有更优雅的解决方案或框架来解决这个常见的场景。我还没有使用reactiveUI和mvvm light,但我认为它在这里很有用 var dpd = Dependen

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

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

我目前使用addValueChanged来实现这一点,它为10个(!()dp中的每一个注册一个回调,但我想知道是否有更优雅的解决方案或框架来解决这个常见的场景。我还没有使用reactiveUI和mvvm light,但我认为它在这里很有用

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

DependencyProperties基于常规属性工作

每次设置一个根常规bool属性时,您也可以为“组合”bool属性引发OnPropertyChanged


组合bool属性的getter应该计算根bool属性。

dependencProperties基于常规属性工作

每次设置一个根常规bool属性时,您也可以为“组合”bool属性引发OnPropertyChanged


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

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

在每个
集合中
可以调用(使用Caliburn Micro语法)


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

在每个
集合中
可以调用(使用Caliburn Micro语法)

在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);
在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);

您还可以覆盖对象的CMs
OnNotifyPropertyChanged
,并检查正在更改的属性的属性名称,如果某个属性正在更改,您可以为相关的属性发出属性更改通知。我发现对于我的属性getter/setter代码来说,这看起来没有那么凌乱。您还可以覆盖CMs
OnNotifyPropertyChanged
,并检查正在更改的道具的属性名称,如果某个属性正在更改,您可以为相关道具发出属性更改通知。我发现对于我的属性getter/setter代码来说,这看起来没有那么凌乱