【问题标题】:WPF - MVVM Command binding on Sub ViewModelWPF - 子视图模型上的 MVVM 命令绑定
【发布时间】:2010-11-28 19:37:50
【问题描述】:

我有一个 VehicleViewModel,它有一个 NotesViewModel 的子 ViewModel

public IManageVehicleNotesViewModel NotesViewModel { get; set; }

在第一次激活 VehicleViewModel 时,我会激活子 ViewModel。

NotesViewModel.Activate();

激活调用一个方法来初始化一些命令,我​​已经打破了这个和它被调用的地方。

CreateCommand = new DelegateCommand<object>(OnCreateCommand, CanCreate);

但是,尽管 TextBox 绑定在子视图上(因此 DataContext 就位),但没有任何命令绑定 - 我尝试在命令上调用 RaiseCanExecuteChanged,但它们没有禁用、启用或调用方法正如预期的那样。

我不知道它是否相关(因为 TextBoxes 是绑定的),但我正在使用 ResourceDictionary 关联 View 和 ViewModel ...

<ResourceDictionary
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
    xmlns:v="clr-namespace:GTS.GRS.N3.Modules.Vehicles.Views"
    xmlns:vm="clr-namespace:GTS.GRS.N3.Modules.Vehicles.Model">
  <DataTemplate DataType="{x:Type vm:ManageVehicleViewModel}">
    <v:ManageVehicleView />
  </DataTemplate>
  <DataTemplate DataType="{x:Type vm:ManageVehicleNotesViewModel}">
    <v:ManageVehicleNotesView />
  </DataTemplate>
</ResourceDictionary>

顶级 VehicleViewModel 上的命令有效。

有没有人经历过这样的事情?是我做事的顺序吗?感谢您的帮助!

干杯,

安迪

【问题讨论】:

    标签: wpf mvvm binding prism command


    【解决方案1】:

    CreateCommand 属性会触发PropertyChanged 事件吗?如果没有,则分配时不会通知 UI...

    尝试使用Snoop之类的工具检查按钮的Command属性是否设置

    【讨论】:

    • 非常感谢,以前我从来不需要在命令上设置 PropertyChanged,但我刚刚重构了我的模块。我已经意识到 RaiseCanExecuteChanged 是 PropertyChanged for Commands 的替代品,感谢您的指点!
    • 如果命令是在View绑定到ViewModel之前定义的,则不需要引发PropertyChanged。反正我的命令属性一般都是只读的,懒初始化的,不用我操心
    【解决方案2】:

    执行此操作并检查输出以查看发生了什么:

    <UserControl …
         xmlns:diagnostics="clr-namespace:System.Diagnostics;assembly=WindowsBase" />
    
    <Button Command="{Binding MyCommand, 
                      diagnostics:PresentationTraceSources.TraceLevel=High}" … />
    

    它应该报告它实际尝试绑定的对象等。在运行时检查输出窗口以查看该绑定发生了什么。

    【讨论】:

      猜你喜欢
      • 2011-07-29
      • 2011-10-07
      • 1970-01-01
      • 1970-01-01
      • 2018-09-20
      • 1970-01-01
      • 2013-01-16
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多