【问题标题】:MVVM WPF - Viewmodel commandbindingMVVM WPF - Viewmodel 命令绑定
【发布时间】:2013-07-18 15:39:47
【问题描述】:

我正在使用 MVVM 模型,我在 WPF 主窗口中有三个用户控件,每个用户控件的 datacontext 设置为 xaml 中的不同视图模型。 主窗口还附加到数据上下文中的不同视图模型。主窗口有三个按钮,应该通过命令绑定来绑定,如何通过xaml将主窗口按钮绑定到对应的usercontrol视图模型Icommand?

【问题讨论】:

  • 如果每个用户控件的数据上下文都是正确的,那么它应该非常简单。如果您需要调用“远程”命令,请尝试使用消息传递框架。

标签: wpf mvvm


【解决方案1】:

很难判断这是否是一个好的解决方案,因为您的应用程序架构缺少很多细节。

基于“我有一个包含 3 个用户控件的窗口并且我希望窗口上的按钮来激活控件视图模型上的命令”的前提,一种解决方案可能是:

<Window>
    <UserControl Name="Control1" />
    <UserControl Name="Control2" />
    <UserControl Name="Control3" />

    <Button Command="{Binding ElementName="Control1", Path="DataContext.Cmd"}" />
    <Button Command="{Binding ElementName="Control2", Path="DataContext.Cmd"}" />
    <Button Command="{Binding ElementName="Control3", Path="DataContext.Cmd"}" />
</Window>

【讨论】:

    【解决方案2】:

    这有点主观,但在我看来,视图模型不应提供多个视图。

    MainWindow 的视图模型应该完全独立于 UserControl 的模型。我建议使用发布/订阅者模式通过您的应用程序发送“事件”来处理广泛使用的功能(参见例如Event Aggregator)。

    【讨论】:

      【解决方案3】:

      如果您无法通过 MainWindow 的 DataContext 的直接绑定访问 ViewModel(即,如果三个 ViewModel 不在 MainWindow 的 ViewModel 中),您可以这样做:

      <Button 
          Name="Button1" 
          DataContext="{Binding DataContext, ElementName=UserControl1}" 
      />
      

      如果我能很好地理解您的要求,这应该可以工作。

      【讨论】:

        猜你喜欢
        • 2018-09-20
        • 2012-06-17
        • 1970-01-01
        • 2012-02-23
        • 2015-06-07
        • 2010-11-06
        • 2011-04-04
        • 1970-01-01
        相关资源
        最近更新 更多