如何从子视图模型更新父ViewModel属性

时间:2013-02-13 15:43:52

标签: wpf viewmodel parent-child communication

我有一个视图窗口,每个标签内都有不同用户控件的标签控件。窗口有自己的视图模型,每个用户控件也是如此。现在,如何从任何子用户控件视图模型更新主窗口视图模型的属性?

2 个答案:

答案 0 :(得分:0)

如果您要从Parent ViewModel实例化子视图模型,那么您可以通过从子视图模型触发事件并在Parent ViewModel上侦听该事件并更新Parent ViewModel的所需属性来实现。但是如果你从View中实例化ViewModel,即你的userControl然后你需要在UserControl中创建DependencyProperty并将它绑定到Parent View Model和Child ViewModel属性,但它确实有一个问题,你只能将一个属性绑定到xaml中的target属性,必须从DependencyProperty的ValueChanged更新Child ViewModel属性。我希望这会给你一个想法。

答案 1 :(得分:0)

我的AddUser UserControl孩子:

public event EventHandler<RoutedEventArgs> SaveUser;

// Wherever I want that event to be launched I write this:
private void buttonSaveUser_Click(object sender, RoutedEventArgs e)
{
    EventHandler<RoutedEventArgs> handler = SaveUser;
    handler(this, userEventArgs);
}

在您的MainWindow.xaml,创建UserControl孩子后,请接受该活动:

addUser = new F7AddUser();
addUser.SaveUser += AddUser;

然后创建新的AddUser方法(此方法必须位于您的MainWindow.xaml)。请小心,因为这个来自event,所以参数必须与启动它的事件相同:

private void AddUser(object o, RoutedEventArgs e)
{
    // Stuff here
}