【发布时间】:2012-03-21 20:55:49
【问题描述】:
我正在使用 MVVM 模式在 WPF/c# 中编写一个表单,并尝试与用户控件共享数据。 (嗯,用户控制视图模型)
我要么需要:
- 在父级中创建一个视图模型并将其绑定到用户控件
- 将某些类与 Xaml 中的视图模型绑定
- 被告知用户控件不是与 MVVM 一起使用的方法,也不能被推向正确的方向。 (我见过数据模板,但它们看起来并不理想)
用户控件仅用于使大型表单更易于管理,因此我不确定这是否是使用 MVVM 的方式,这正是我过去会这样做的方式。
我想在 Xaml 中向 VM 结构传递一个类。
<TabItem Header="Applicants">
<Views:ApplicantTabView>
<UserControl.DataContext>
<ViewModels:ApplicantTabViewModel Client="{Binding Client} />
</UserControl.DataContext>
</Views:ApplicantTabView>
</TabItem>
public ClientComp Client
{
get { return (ClientComp)GetValue(ClientProperty); }
set { SetValue(ClientProperty, value); }
}
public static readonly DependencyProperty ClientProperty = DependencyProperty.Register("Client", typeof(ClientComp),
typeof(ApplicantTabViewModel),
new FrameworkPropertyMetadata
(null));
但我似乎无法获得一个依赖属性来接受非静态内容。
这对我来说已经有一段时间了,但假设我会发现但失败了,所以我在这里。
提前致谢, 奥利
【问题讨论】:
-
虚拟机通常不应该是依赖对象
-
我不希望 VM 成为 DP,我只想能够与 UserControl 的 VM 共享一些父类。如果我尝试正常绑定,我会收到一个错误,它需要是 DP。
-
是的,你通常也不(在那个方向)绑定虚拟机
-
因此,如果我有一个包含多个部分的大型表单和一个越来越难以管理的虚拟机。解决这个问题的“行业标准”方式是什么?在 Winforms 中,我会制作一个 UserControl 来吐出表单。
-
嗯,是的,但是您随后会将这些用户控件的 DataContext 绑定到您的 VM 的属性,而不是创建新 VM 并将其属性绑定到其他 VM。
标签: wpf binding mvvm user-controls dependency-properties