【问题标题】:Setting property of child viewmodel from parent从父级设置子视图模型的属性
【发布时间】:2014-09-19 03:17:56
【问题描述】:

我有一个我将调用 View1 的视图,它有一个我将调用 View2 的嵌套用户控件。我的主应用程序创建并显示 View1,后者又创建 View2,因为它是 View1 上的用户控件。 View1 和 View2 都有自己的视图模型。我需要做的是从 View1 的 viewmodel 中获取一个值到 View2 的 viewmodel。

View2 是一个完全独立的控件,它有自己的功能,可以在任何其他视图中重用,但它需要来自它所包含的任何视图的一条信息。在此处给出的情况下,这将是视图1。

我的第一次尝试是在 View2 上创建一个依赖属性,以便可以像这样在 View1 中设置它:

<myUserControls:View2 MyProperty="{Binding RelativeSource={RelativeSource Self}, Path=Parent.DataContext.MyProperty}"/>

这可以设置依赖属性,但这无助于将属性值放入 View2 的视图模型中,以便我可以使用它。

我正在 Silverlight 中执行此操作,如果这有什么不同的话。

有人知道有没有办法做到这一点?

【问题讨论】:

标签: c# xaml silverlight mvvm


【解决方案1】:

我建议使用“中介者”模式,或视图模型之间的某种通信。我个人使用 galasoft MVVM 轻型消息传递取得了巨大的成功。 Rachel 还写了一篇不错的导航博客:Rachel's MVVM blog

但我会尝试通过让消息处理数据上下文切换和视图模型更新而不是创建依赖项属性来减少程序中的耦合。

例如,您可以拥有一个所有视图模型都继承自的 baseviewmodel 类,并在主视图模型中使用类型为 baseviewmodel 的多态通用“视图模型”属性。一旦收到从 viewmodel #1 切换到 viewmodel #2 的消息,调用“更新模型”函数(您已在 baseviewmodel 中声明并在 VM #2 中覆盖),然后它将处理更新您的 VM #2。

【讨论】:

  • 您还可以将通用“数据对象”填充到您的消息中,这样当 VM #1 发送消息时,它也会发送 VM #2 所需的值。
猜你喜欢
  • 1970-01-01
  • 2018-05-19
  • 2013-05-11
  • 1970-01-01
  • 2017-11-14
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多