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

时间:2015-08-08 08:00:02

标签: c# wpf mvvm user-controls

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

示例:(基本个人信息)

我有一个usercontrol或(view-1)显示我的personalInformation数据库中的单个人。

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

问题是如何从(view-2)到(view-1)获取单人的ID,因为它们是不同的usercontrol和不同的viewmodel。

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

1 个答案:

答案 0 :(得分:3)

A

Usercontrols是要成为Window一部分的一些要素,Window可以是UserControls之间的合适连接符。您可以像这样处理这种情况:

  1. WindowA
  2. UserControlPersonList
    • 包括SelectedPersion Dependency PropertySelectedPerson类型为model classviewmodel class
  3. UserControlPerson
  4. 现在,在WindowA.xaml:

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

    结果可能是这样的(主 - 细节视图):

    enter image description here

    当您选择某人时,您需要填充SelectedPerson的{​​{1}}依赖项属性。要执行此操作,您可以使用UserControlPersonList并更改Command中的SelectedPerson属性,并将PersonListViewModel中的SelectedPerson依赖项属性绑定到 OR 在您的UserControlPersonListthis answer中执行此操作。

    但是,如果您希望UserControlPersonListUserControls的不同Windows中进行全局更改,则可以将PersonListViewModel保存在您的所有Windows中都可访问的静态属性中然后,您的程序Usercontrols会在其中创建一个名为event的{​​{1}}。现在,在您的SelectedPersionChanged中,您可以订阅UserControlsEventHandler并更改SelectedPersionChanged。 但是,当您不再需要DataContext以防止内存泄漏时,必须EventHandler取消订阅SelectedPersionChanged