如何使用Viewmodel-first从代码隐藏设置viewmodel属性?

时间:2013-01-11 10:39:26

标签: c# wpf xaml mvvm viewmodel

在我的WPF(4.0)应用程序中,我使用Viewmodel-first模式。因此,首先创建我的视图模型,然后使用数据模板创建视图。可以找到工作演示here

现在,从创建的视图(代码隐藏)中,我需要修改viewmodel的属性。在View-first方法中,我只需访问一个命名的viewmodel实例。但是,Viewmodel-first方法不允许这样做。有一个视图模型,但视图并不关心它是什么。

BAD:

当然,您可以抓住DataContext并使用它,但这有效地结合了视图和t viewmodel。

private void MyView_Loaded(object sender, RoutedEventArgs e)
{
    this.viewModel = DataContext as MyViewModel;
}

必须有一个推荐的模式。命令?消息?请帮忙!

问:如何修改(设置属性)活动视图模型?

2 个答案:

答案 0 :(得分:4)

使用Bindings将数据从View传递到ViewModel,并使用命令激活ViewModel。

命令应该使用绑定到ViewModel上的执行命令。

应使用消息在ViewModel之间进行通信。

答案 1 :(得分:3)

你做不到。否则View将了解View Model。

如果此初始化在所有视图模型中都是通用的,那么您可以在ViewModelBase中定义属性/事件,并从此类派生所有视图模型。

  

问:如何修改(设置属性)活动视图模型?

您需要使用EventAggregator模式进行View-ViewModel通信。

您可以使用自己喜欢的MVVM framework和几乎所有框架支持EventAggregator(或MessageBusEnterprise Bus)。