如何使用 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
之间的合适连接器。你可以这样处理这个场景:
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>
结果可能是这样的(主从视图):
当你select一个人时,你需要SelectedPerson
UserControlPersonList
的依赖属性。要执行此操作,您可以使用 Command
并更改 PersonListViewModel
中的 SelectedPerson
属性 并将 UserControlPersonList
中的 SelectedPerson
依赖项 属性 绑定到它 或 在你的 UserControlPersonList
级别中执行此操作,例如 this answer。
B
但是如果你想在不同的 Windows
中对你的 UserControls
进行一些全局更改,你可以将 PersonListViewModel
保存在静态的 属性 中,这在你的所有Windows
和 Usercontrols
然后在其中创建一个名为 SelectedPersionChanged
的 event
。现在,在您的 UserControls
中,您可以将 EventHandler
订阅到 SelectedPersionChanged
并更改您的 DataContext
。
但是当您不再需要 UserControl
以防止内存泄漏时,您 必须 从 SelectedPersionChanged
取消订阅 EventHandler
。
例如,我有一个主窗口,上面有一个框架,它绑定到我拥有的所有用户控件的模型。
示例:(基本个人信息)
我有一个用户控件或 (view-1) 显示我的个人信息数据库中的单个人。
我还有一个用户控件或 (view-2) 显示我数据库中的所有人员列表。
问题是我如何获得从 (view-2) 到 (view-1) 的单个人的 ID,因为它们是不同的用户控件和不同的视图模型。
这种情况的最佳方法是什么? TIA。
一个
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>
结果可能是这样的(主从视图):
当你select一个人时,你需要SelectedPerson
UserControlPersonList
的依赖属性。要执行此操作,您可以使用 Command
并更改 PersonListViewModel
中的 SelectedPerson
属性 并将 UserControlPersonList
中的 SelectedPerson
依赖项 属性 绑定到它 或 在你的 UserControlPersonList
级别中执行此操作,例如 this answer。
B
但是如果你想在不同的 Windows
中对你的 UserControls
进行一些全局更改,你可以将 PersonListViewModel
保存在静态的 属性 中,这在你的所有Windows
和 Usercontrols
然后在其中创建一个名为 SelectedPersionChanged
的 event
。现在,在您的 UserControls
中,您可以将 EventHandler
订阅到 SelectedPersionChanged
并更改您的 DataContext
。
但是当您不再需要 UserControl
以防止内存泄漏时,您 必须 从 SelectedPersionChanged
取消订阅 EventHandler
。