.net - mvvm-light 工具包未触发 Window Loaded 事件

标签 .net wpf mvvm mvvm-light

我有一个窗口并使用 MVVM 轻工具包绑定(bind)到 Loaded 事件:

    <Window 
      ...
      xmlns:cmd="clr-namespace:GalaSoft.MvvmLight.Command;assembly=GalaSoft.MvvmLight.Extras.WPF4"
      xmlns:i="clr-namespace:System.Windows.Interactivity;assembly=System.Windows.Interactivity"
      ...
      >

      <i:Interaction.Triggers>
        <i:EventTrigger EventName="Loaded">
          <cmd:EventToCommand Command="{Binding Loaded, Mode=OneWay}" />
        </i:EventTrigger>
      </i:Interaction.Triggers>
    </Window>

在我的 View 模型中,我有以下内容:
private ICommand _loaded;
public ICommand Loaded
{
  get
  {
    if (_loaded == null)
    {
      _loaded = CreateAsyncRelayCommand(p => OnLoaded());
    }
    return _loaded;
  }
}

public void OnLoaded()
{
  throw new NotImplementedException();
}

但是在显示的窗口中,尽管当我在 Loaded 属性中放置断点时正在初始化 ICommand 变量,但不会引发异常。我尝试改用 Initialized 事件,但还是一样。这在我在同一个应用程序中拥有的另一个窗口中工作正常,所以我几乎可以肯定我做的一切都是正确的 - 可能有我遗漏的东西吗?当我与代码隐藏绑定(bind)时,它工作正常,但我想坚持 mvvm 模式。
提前致谢。

最佳答案

尝试在构造函数中分配命令,即

public ViewModel() {
    _loaded = CreateAsyncRelayCommand(p => OnLoaded());
}

关于.net - mvvm-light 工具包未触发 Window Loaded 事件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3157730/

相关文章:

c# - 在 Windows 窗体文本字段上指定数据类型

C#/.NET 如何从类名中找到包含的命名空间

WPF : GridViewColumn. 标题拖动(重新排序)问题

wpf - 如何手动触发 MahApps 动画

WPF/MVVM : Opening different UserControls in same DockPanel

c# - 在 wpf 中绑定(bind)列表框并刷新数据

c# - 默认情况下,我应该使用内部可见性还是公共(public)可见性?

c# - 签署 .net 核心程序集的正确方法

c# - WPF DatePicker Watermark 使用了错误的语言,但 Dateformat 是正确的

c# - 对于 WPF 窗口中介服务,使用简单注入(inject)器按键解析实例的替代方法是什么?