C# 当您必须直接引用控件时,MVVM如何适应WPF
我是WPF的新手,我正在尝试将MVVM设计模式合并到我的项目中。在我看到的所有MVVM示例中,MainWindow.xaml.cs仅用于将DataContext设置为视图模型C# 当您必须直接引用控件时,MVVM如何适应WPF,c#,wpf,mvvm,C#,Wpf,Mvvm,我是WPF的新手,我正在尝试将MVVM设计模式合并到我的项目中。在我看到的所有MVVM示例中,MainWindow.xaml.cs仅用于将DataContext设置为视图模型 this.DataContext = viewModel; 一切都非常整洁,与UI分离。事件也被命令替换。关于这一点,我有两个问题 我想知道如何连接没有command属性的控件 当我通常直接与控件交互时,我应该怎么做?例如,可能我想将组合框的索引设置为-1。我应该如何在视图模型上执行此操作 @EdPlunkett、@Cl
this.DataContext = viewModel;
一切都非常整洁,与UI分离。事件也被命令替换。关于这一点,我有两个问题
@EdPlunkett、@Clemens和@BionicCode收集的评论回答了我的问题 总结如下:
您能否用具体的编程术语明确“连接控制”对您意味着什么?viewmodels永远不会引用控件。他们甚至永远都不会知道控制的存在。您要做的是将ComboBox.ItemsSource绑定到viewmodel的集合属性,然后将ComboBox.SelectedItem绑定到viewmodel的另一个属性。如果将viewmodel的selected item属性设置为null,则组合框将没有选择。(是绑定到组合框选择的另一种方式,但适用相同的原则)这一切都是通过绑定完成的。如果控件没有可以绑定到视图模型中ICommand属性的命令属性,那么它仍然可以具有双向绑定的属性,从而将数据传输回视图模型。第一个问题太广泛了,您实际遇到的是哪个控件的问题?第二个问题,您将绑定selectedvalue并设置绑定到的属性。如果您使用控件B作为控件a的“DataContext”,那么控件B是视图还是viemodel?;)@rekshino我同意EdPlunkett的观点,如果你认为“控件”是“视图模型”,那么你就不会真正理解MVVM。我将补充一点,这应该是对这个答案的补充——行为。行为是MVVM对没有良好绑定支持的控件的解决方案,例如ListBox缺少可绑定的
SelectedItems
属性(复数)。一个行为可以让你以一种孤立的方式编写视图端代码,将其连接到顽皮的控件,并通过该行为管理你的MVVM和绑定