【问题标题】:WPF App With several Usercontrols passing values to MainViewModel (MVVM)具有多个用户控件的 WPF 应用程序将值传递给 MainViewModel (MVVM)
【发布时间】:2010-06-04 08:57:08
【问题描述】:

我有一个 wpf 应用程序,它在您浏览系统时显示 5 个不同的用户控件。每个用户控件上都有一个列表框。所以我想选择一个项目并将其传递回 MainViewModel。我现在让它工作,以便我可以在 ViewModelBase 中存储一个值,但似乎我调用用户控件的策略是有缺陷的,因为我无法链接到每个单独的 ViewModel,而只能链接到 ViewModelBase。我知道我哪里出错了,但我想知道有没有办法通过单独初始化每个用户控件来做到这一点,而不仅仅是像我在这里所做的那样关闭 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"/>

任何帮助将不胜感激。
谢谢。

【问题讨论】:

  • 我不知道是不是只有我一个人不理解你的设计。但是你能清楚地解释你的设计吗?这是什么意思:So i want to select an item and pass it back to MainViewModel。您想选择一个 ListBoxItem 吗?所有的用户控件和主视图是否共享相同的数据上下文?
  • 好吧,基本上我每个用户控件都有 ViewModel。所以可以说有一个 usercontrol1.xaml 有一个列表框。我的 usercontrol1viewmodel 中有一个 personVariable,我将所选项目存储在那里。现在我想要那个当我点击一个按钮时被传回我的 mainViewModel。当我的 ViewModelBase 中的变量(我有权发送委托)“ynd = new yesnodelegate(yesNoNavigation); Control.SetReturnData(Ynd);”时有效这个 setReturnData 方法在 ViewModelBase 中,但我希望它在 Usercontrol1ViewModel 中,但它不会访问它。很抱歉造成混淆。我还在学习 MVVM

标签: .net wpf mvvm c#-4.0


【解决方案1】:

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

这个particular answer 向您展示了如何使用它。

【讨论】:

    【解决方案2】:

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

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

    【讨论】:

      猜你喜欢
      • 2013-10-18
      • 1970-01-01
      • 1970-01-01
      • 2012-03-21
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-04-06
      • 1970-01-01
      相关资源
      最近更新 更多