Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/wpf/13.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 当您必须直接引用控件时,MVVM如何适应WPF_C#_Wpf_Mvvm - Fatal编程技术网

C# 当您必须直接引用控件时,MVVM如何适应WPF

C# 当您必须直接引用控件时,MVVM如何适应WPF,c#,wpf,mvvm,C#,Wpf,Mvvm,我是WPF的新手,我正在尝试将MVVM设计模式合并到我的项目中。在我看到的所有MVVM示例中,MainWindow.xaml.cs仅用于将DataContext设置为视图模型 this.DataContext = viewModel; 一切都非常整洁,与UI分离。事件也被命令替换。关于这一点,我有两个问题 我想知道如何连接没有command属性的控件 当我通常直接与控件交互时,我应该怎么做?例如,可能我想将组合框的索引设置为-1。我应该如何在视图模型上执行此操作 @EdPlunkett、@Cl

我是WPF的新手,我正在尝试将MVVM设计模式合并到我的项目中。在我看到的所有MVVM示例中,MainWindow.xaml.cs仅用于将DataContext设置为视图模型

this.DataContext = viewModel;
一切都非常整洁,与UI分离。事件也被命令替换。关于这一点,我有两个问题

  • 我想知道如何连接没有command属性的控件

  • 当我通常直接与控件交互时,我应该怎么做?例如,可能我想将组合框的索引设置为-1。我应该如何在视图模型上执行此操作


  • @EdPlunkett、@Clemens和@BionicCode收集的评论回答了我的问题

    总结如下:

  • 我可以通过INotificationChanged和ObservableCollection绑定控件的属性来与控件交互

  • 没有命令属性的元素仍然可以在viewmodel中具有绑定到ICommand属性的属性


  • 您能否用具体的编程术语明确“连接控制”对您意味着什么?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和绑定