我是WPF的新手。我正在使用WPF创建应用程序(所有UI控件已经修复)和MVVM,但大多数事件都在代码隐藏中。我正在清除代码隐藏的过程,但是我有类似(下面的代码)的代码来切换选项卡,并根据参数触发控件的可见性:
tabItem1.Selected = true;
textBox1.Visibility = Visibility.Hidden;
lbxHusbandsWives.Items.Add(txtHusbandsWives.Text + '/' +
cbxHusbandsWivesCountry.Text + '/' +
dpHusbandsWives.SelectedDate.Value.ToShortDateString());
我如何在viewmodel中执行此操作?那么,在一个命令中呢?所以我可以清除凌乱的代码隐藏?谢谢你的帮助。 :)
答案 0 :(得分:5)
正如我之前多次说过的那样,MVVM并不意味着“没有代码背后”。您可以或应该在代码隐藏中执行某些操作,只要它们与视图严格相关,并且ViewModel无需正常工作。
话虽如此,在大多数情况下,您并不需要在代码隐藏中做任何事情。您通常使用绑定来控制ViewModel中的视图。这允许ViewModel完全忽略视图:它只公开视图可以访问的属性,并在属性值更改时发送通知。 ViewModel肯定不操纵视图或其组件。
您发布的代码中的所有内容都可以使用XAML中的绑定完成:
textBox1.Visibility
可以绑定到ViewModel的bool属性,使用BooleanToVisibilityConverter
lbxHusbandsWives.ItemsSource
可以绑定到ViewModel中的ObservableCollection
(ObservableCollection
会在项目添加或删除项目时通知视图。txtHusbandsWives.Text
,cbxHusbandsWivesCountry.Text
和dpHusbandsWives.SelectedDate
也可以绑定到相应类型的属性