WPF应用程序有几个Usercontrols将值传递给MainViewModel(MVVM)

时间:2010-06-04 08:57:08

标签: .net wpf mvvm c#-4.0

我有一个wpf应用程序,在您浏览系统时会显示5个不同的用户控件。每个用户控件都有一个列表框。所以我想选择一个项目并将其传递回MainViewModel。我现在正在使用它,以便我可以在ViewModelBase中存储一个值,但似乎我调用User控件的策略是有缺陷的,因为我无法链接到每个单独的ViewModel但只能链接到ViewModelBase。我明白我哪里出错但我想知道有没有办法通过单独初始化每个Usercontrol而不是像我在这里那样关闭viewModelBase来实现这一点:

    private ViewModelBase _control;
    public ViewModelBase Control
    {
        get { return _control; }
        set
        {
            _control = value;
            OnPropertyChanged("Control");
        }
    } 

然后我说加载

     Control = new MainScreenViewModel();
     ynd = new YesNoDelegate(YesNoNavigation);
     Control.SetReturnData(ynd);
     Control.name = "MainScreen";
然后在xaml中调用

控件,如

     <ContentControl  Content="{Binding Control}" Height="350" Width="525" Grid.Column="1"/>

任何帮助都会非常受欢迎 感谢。

2 个答案:

答案 0 :(得分:0)

如果您想在ViewModel之间进行通信,请查看MVVMLightMessenger Class

particular answer说明了如何使用它。

答案 1 :(得分:0)

我从使用Messenger类切换到使用WCF原生的CommandManager 专门定义自定义RoutedUICommand 然后在需要响应命令的位置使用CommandManager.RegisterClassCommandBinding。

优点是不必从mediatorbase继承 不必依赖于作者已停止维护的代码(尽管编写得很好!) 不必使用装饰器并依赖于消息键的字符串