Wpf 如何让房地产泡沫化?

Wpf 如何让房地产泡沫化?,wpf,Wpf,我的结构如下: 窗口1->UserControlA->UserControlB->UserControlC 每个视图都有自己的视图模型。如何在UserControlA上创建依赖于UserControlC属性的属性 我能想到的唯一一件事是从B公开C的属性更改事件,这样我就可以从A监听C的事件并更新A的依赖性属性。问题是,这似乎过于做作,因此我认为必须有一个更简单的解决方案。您可以做两件事: 按照你在问题中提到的做:让每一位家长观察自己的孩子 使用RoutedEvents:在C上曝光,在A上处理 编

我的结构如下: 窗口1->UserControlA->UserControlB->UserControlC

每个视图都有自己的视图模型。如何在UserControlA上创建依赖于UserControlC属性的属性


我能想到的唯一一件事是从B公开C的属性更改事件,这样我就可以从A监听C的事件并更新A的依赖性属性。问题是,这似乎过于做作,因此我认为必须有一个更简单的解决方案。

您可以做两件事:

  • 按照你在问题中提到的做:让每一位家长观察自己的孩子

  • 使用RoutedEvents:在C上曝光,在A上处理

  • 编辑

    在进一步思考您的问题后:


    如果它是C的ViewModel的一个属性,您想冒泡,则只能使用第一个选项,因为RoutedEvents仅在UI控件上受支持。

    您可以链接
    依赖项属性来实现这一点。您需要在所有用户控件中公开dp。将
    UserControlC
    的属性与
    UserControlB
    绑定,然后将
    UserControlA
    绑定。这样,每当更改
    UserControlC
    中的属性时,
    UserControlA
    中的属性也会更改

    A.xaml.cs

    class VewModelA : INotifyPropertyChanged
    {
        prop TextA {get {return thevalue;} set : set thevalue & RaisePropertyChanged("TextA")}
    }
    
    B.xaml.cs

    class ViewModelB : INotifyPropertyChanged
    {
        prop TextB {get {return thevalue;} set : set thevalue & RaisePropertyChanged("TextB")}
    }
    
    C.xaml.cs

    class ViewModelC : INotifyPropertyChanged
    {
        prop TextC {get {return thevalue;} set : set thevalue & RaisePropertyChanged("TextC")}
    }
    
    A.xaml

    <controls:B TextB={Binding TextA, Mode=TwoWay}" />
    
    
    

    无论何时更改C的文本,绑定都会更新TextA的值。当然,您必须将dp与其控件模板中相应的viewmodel属性进行映射。

    一个简单的解决方案可能是使用作为Prism一部分提供的EventAggregator机制。

    抱歉,我以为我理解了这一点。在控件C上创建DP时,“TextC”属性获取/设置“TextCProperty”。如何将其映射到viewmodel属性?
    <controls:C TextC={Binding TextB, Mode=TwoWay}" />