mvvm-light工具包没有触发Window Loaded事件

时间:2010-07-01 12:28:03

标签: .net wpf mvvm mvvm-light

我有一个Window并使用MVVM light工具包绑定到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>

在我的视图模型中,我有以下内容:

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事件,但仍然是相同的事情。这在我在同一个应用程序中的另一个窗口中工作正常,所以我几乎可以肯定我正在做的一切正确 - 有什么东西我不见了吗?当我与代码隐藏绑定时,它工作正常,但我想坚持mvvm模式。 提前谢谢。

1 个答案:

答案 0 :(得分:0)

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

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