如何让房产改变泡沫?

时间:2012-04-26 04:06:46

标签: wpf

我有以下结构: Window1 - > UserControlA - > UserControlB - > UserControlC

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

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

3 个答案:

答案 0 :(得分:1)

您可以做两件事:

  1. 按照你在问题中提到的那样做:让每个家长观察孩子。

  2. 使用RoutedEvents:在C上公开a RoutedEvent并在A上处理它。

  3. 修改

    在更多地考虑你的问题之后:

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

答案 1 :(得分:1)

您可以链接Dependency Properties来实现此目的。您需要在所有用户控件中公开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}" />

B.xaml

<controls:C TextC={Binding TextB, Mode=TwoWay}" />

每当更改C的Text时,绑定都会更新TextA的值。当然,您必须在其控件模板中将dp与其对应的viewmodel属性进行映射。

答案 2 :(得分:0)

一个简单的解决方案可能是使用可用作Prism http://compositewpf.codeplex.com/的一部分的EventAggregator机制