如何从ViewModel操作WPF窗口控件(选项卡,文本框,列表框)

时间:2011-11-15 09:33:35

标签: wpf mvvm

我是WPF的新手。我正在使用WPF创建应用程序(所有UI控件已经修复)和MVVM,但大多数事件都在代码隐藏中。我正在清除代码隐藏的过程,但是我有类似(下面的代码)的代码来切换选项卡,并根据参数触发控件的可见性:

tabItem1.Selected = true;

textBox1.Visibility = Visibility.Hidden;

lbxHusbandsWives.Items.Add(txtHusbandsWives.Text + '/' +
   cbxHusbandsWivesCountry.Text + '/' +
   dpHusbandsWives.SelectedDate.Value.ToShortDateString());

我如何在viewmodel中执行此操作?那么,在一个命令中呢?所以我可以清除凌乱的代码隐藏?谢谢你的帮助。 :)

1 个答案:

答案 0 :(得分:5)

正如我之前多次说过的那样,MVVM并不意味着“没有代码背后”。您可以或应该在代码隐藏中执行某些操作,只要它们与视图严格相关,并且ViewModel无需正常工作。

话虽如此,在大多数情况下,您并不需要在代码隐藏中做任何事情。您通常使用绑定来控制ViewModel中的视图。这允许ViewModel完全忽略视图:它只公开视图可以访问的属性,并在属性值更改时发送通知。 ViewModel肯定操纵视图或其​​组件。

您发布的代码中的所有内容都可以使用XAML中的绑定完成:

  • textBox1.Visibility可以绑定到ViewModel的bool属性,使用BooleanToVisibilityConverter
  • lbxHusbandsWives.ItemsSource可以绑定到ViewModel中的ObservableCollectionObservableCollection会在项目添加或删除项目时通知视图。
  • txtHusbandsWives.TextcbxHusbandsWivesCountry.TextdpHusbandsWives.SelectedDate也可以绑定到相应类型的属性