我有一个窗口,该窗口可加载客户表和另一个用户对输入字段的控制,当我选择时,我希望填充用户控件输入。我目前有一个数据杂志,即通过绑定在CustomerviewModel中设置了所选项目。当选择此过程时,它会更新带有所选项目属性(例如名称,电子邮件等(的文本框。我有一个包含多个输入字段的CultiansettingsViewModel。我正在尝试将所选项目绑定到此模型中的输入,但是由于CustomerviewModel不了解customertingsetsviewmodel,因此我看不到文本框输入中的绑定。
使用datatype使用DataTemplate
加载视图。
mainwindow.xaml
<Window.Resources>
<DataTemplate DataType="{x:Type VM:CustomerVM}">
<View:Customers/>
</DataTemplate>
<DataTemplate DataType="{x:Type VM:CustomerSettingsVM}">
<View:CustomerSettings />
</DataTemplate>
<DataTemplate DataType="{x:Type VM:SuppliersVM}">
<View:Suppliers/>
</DataTemplate>
<DataTemplate DataType="{x:Type VM:SuppliersSettingsVM}">
<View:SupplierSettings/>
</DataTemplate>
</Window.Resources>
<ContentControl Content="{Binding SelectedMain}" Margin="0,135,0,10" Grid.ColumnSpan="2"/>
<ContentControl Content="{Binding SelectedSettings}" Margin="105,53,10,45"/>
这些设置并根据所呈现的数据类型获得正确的视图。
mainvm.cs
Customer = new CustomerVM();
CustomerSettings = new CustomerSettingsVM();
SelectedMain = Customer;
SelectedSettings = CustomerSettings;
在 CustomerVM
中,我有一个与客户视图中任何内容的绑定在一起的绑定,但是我如何获取客户设置视图以查看所选客户已更改并填充输入?
customerv.cs
public Customer SelectedCustomer
{
get { return _selectedCustomer; }
set
{
_selectedCustomer = value;
RaisePropertyChangedEvent("SelectedCustomer");
}
}
我已经将问题的简单解决方案上传到github可能会更好地了解我要实现的目标
我认为您错过了有关MVVM的一些概念,也许您应该回到基础上。基本上,您的ViewModels必须是您视图的"可测试副本"。因此,如果您的目标是构建包含客户设置的客户视图,那么您需要的是:
- 带有cunitustertingsviewModel属性的自定义服务模型
- 使用CustomerviewModel作为DataContext 的自定义服务
- customerettingsview从customertingsviewmodel bended bended the customerviewModel
另一种方法:如果您希望一个视图包含另一个视图,则可以拥有一个ViewModel来包含另一个ViewModel。
这个另一个问题可能会向您展示如何使用VM作为另一个VM的属性。
请使用您的github示例查看我建议的解决方案。基本上,您的问题是,您不应在视图中直接使用客户模型,而是创建一个自定义服务,而只是删除客户eTtingVm。您可以通过阅读我如何处理MVVM来了解我的实现。
希望它有帮助。