如何使用 mvvm 将数据从用户控件传递到另一个用户控件

How can I pass data from usercontrol to another usercontrol using mvvm

例如,我有一个主窗口,上面有一个框架,它绑定到我拥有的所有用户控件的模型。

示例:(基本个人信息)

我有一个用户控件或 (view-1) 显示我的个人信息数据库中的单个人。

我还有一个用户控件或 (view-2) 显示我数据库中的所有人员列表。

问题是我如何获得从 (view-2) 到 (view-1) 的单个人的 ID,因为它们是不同的用户控件和不同的视图模型。

这种情况的最佳方法是什么? TIA。

一个

Usercontrols 是您的 Window 的一部分,然后 Window 可以作为您的 UserControls 之间的合适连接器。你可以这样处理这个场景:

  1. WindowA
  2. UserControlPersonList
    • 包括SelectedPersionDependency PropertySelectedPerson 类型是 model classviewmodel class
  3. UserControlPerson

现在,里面 WindowA.xaml:

<StackPanel>
    <userControls:UserControlPersonList x:Name="PersonListControl"/>

    <userControls:UserControlPerson DataContext="{Binding ElementName=PersonListControl, Path=SelectedPerson}"/>
</StackPanel>

结果可能是这样的(主从视图):

当你select一个人时,你需要SelectedPersonUserControlPersonList的依赖属性。要执行此操作,您可以使用 Command 并更改 PersonListViewModel 中的 SelectedPerson 属性 并将 UserControlPersonList 中的 SelectedPerson 依赖项 属性 绑定到它 在你的 UserControlPersonList 级别中执行此操作,例如 this answer


B

但是如果你想在不同的 Windows 中对你的 UserControls 进行一些全局更改,你可以将 PersonListViewModel 保存在静态的 属性 中,这在你的所有WindowsUsercontrols 然后在其中创建一个名为 SelectedPersionChangedevent。现在,在您的 UserControls 中,您可以将 EventHandler 订阅到 SelectedPersionChanged 并更改您的 DataContext。 但是当您不再需要 UserControl 以防止内存泄漏时,您 必须 SelectedPersionChanged 取消订阅 EventHandler