【发布时间】:2015-07-12 19:24:05
【问题描述】:
我在 WPF 应用程序中从 XAML 绑定到属性,但此查询是关于在另一个类/对象中引发另一个类属性时引发一个类属性的“PropertyChanged”事件。一个用例是组合框 ItemsSource 绑定到属性(下面我的简化示例中的 PropB),并且该属性返回基于其他属性的集合(下面的 PropA)。当 A 类中的 PropA 发生变化时,B 类中的 PropB 需要引发 PropertyChanged,但 A 类没有引用 B 类。
当另一个对象中的属性发生更改时,是否存在让 INotifyPropertyChanged 对象的属性引发“OnPropertyChanged”的现有方法或框架?
下面是我想使用虚构的“通知”属性作为绑定路径的示例:
public class A : NotifyPropertyChanged
{
string m_PropA;
public string PropA
{
get { return m_PropA; }
set
{
if (m_PropA != value)
{
m_PropA = value;
OnPropertyChanged("PropA");
}
}
}
}
public class B : NotifyPropertyChanged
{
public A ARef { get; private set; }
string m_PropB;
[Notify("ARef.PropA")]
public string PropB
{
get { return ARef.PropA; }
}
}
理想情况下,该属性会为属性路径(ARef 和 PropA)中的每个属性创建一个绑定,并且当它们中的任何一个发生更改时,它会在类 B 上调用 OnPropertyChanged,并将“PropB”作为 propertyName 参数传递。我假设 ARef 属性在更改时也需要引发事件,但如果不这样做会很好。
我猜这需要一些反射和弱事件监听器。希望存在我可以使用的东西。抱歉,如果之前已经回答过这个问题。
【问题讨论】:
-
如果存在“ViewModelA”和“ViewModelB”之类的东西,您可以使用
Mediator模式将消息从一个发送到另一个。网络上有几篇关于该主题的文章,例如:marlongrech.wordpress.com/2009/04/16/… -
谢谢。我的时间有点短,所以在进一步阅读之前我会问 - 当 B 引用 A 时,这是否需要 A 向 B 发送消息?在我上面的示例中,A 可能位于由包含 B 的不同程序集引用的程序集中,因此 A 无法向 B 发送消息(即它不知道 B)。希望这个问题有意义。
-
Mediator是关于对象向“它可能关心的人”发送消息,通信对象不需要相互“了解”,不需要从“A”到“B”的引用,反之亦然- 反之