例如,我有一个主窗口,其上有一个框架,它绑定到我拥有的所有用户控件的模型。
示例:(基本个人信息)
我有一个usercontrol或(view-1)显示我的personalInformation数据库中的单个人。
我还有一个usercontrol或(view-2)显示我数据库中的所有人员列表。
问题是如何从(view-2)到(view-1)获取单人的ID,因为它们是不同的usercontrol和不同的viewmodel。
这种情况的最佳方法是什么? TIA。
答案 0 :(得分:3)
Usercontrols
是要成为Window
一部分的一些要素,Window
可以是UserControls
之间的合适连接符。您可以像这样处理这种情况:
WindowA
强> UserControlPersonList
强>
SelectedPersion
Dependency Property。 SelectedPerson
类型为model class
或viewmodel class
UserControlPerson
强> 现在,在WindowA.xaml:
中<StackPanel>
<userControls:UserControlPersonList x:Name="PersonListControl"/>
<userControls:UserControlPerson DataContext="{Binding ElementName=PersonListControl, Path=SelectedPerson}"/>
</StackPanel>
结果可能是这样的(主 - 细节视图):
当您选择某人时,您需要填充SelectedPerson
的{{1}}依赖项属性。要执行此操作,您可以使用UserControlPersonList
并更改Command
中的SelectedPerson
属性,并将PersonListViewModel
中的SelectedPerson
依赖项属性绑定到 OR 在您的UserControlPersonList
级this answer中执行此操作。
但是,如果您希望UserControlPersonList
在UserControls
的不同Windows
中进行全局更改,则可以将PersonListViewModel
保存在您的所有Windows
中都可访问的静态属性中然后,您的程序Usercontrols
会在其中创建一个名为event
的{{1}}。现在,在您的SelectedPersionChanged
中,您可以订阅UserControls
至EventHandler
并更改SelectedPersionChanged
。
但是,当您不再需要DataContext
以防止内存泄漏时,必须从EventHandler
取消订阅SelectedPersionChanged
。