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

发布于 2024-09-08 04:28:43 字数 1053 浏览 0 评论 0原文

我有一个窗口并使用 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();
}

但是在显示的窗口上,尽管 ICommand 变量在我放置时正在初始化,但不会引发异常Loaded 属性中的断点。我尝试更改为使用初始化事件,但仍然是同样的事情。这在同一个应用程序中的另一个窗口中工作得很好,所以我几乎确定我做的一切都是正确的 - 是否有我遗漏的东西?当我与代码隐藏绑定时,它工作正常,但我想遵守 mvvm 模式。 提前致谢。

I have a Window and using MVVM light toolkit to bind to the Loaded event:

    <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>

and in my view-model, I have the following:

private ICommand _loaded;
public ICommand Loaded
{
  get
  {
    if (_loaded == null)
    {
      _loaded = CreateAsyncRelayCommand(p => OnLoaded());
    }
    return _loaded;
  }
}

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

but on the window showing, the exception isn't thrown although the ICommand variable is being initialized when I put a break point in the Loaded property. I've tried changing to using the Initialized event, but still the same thing. This works fine in another Window I have in the same app, so I'm almost sure I'm doing everything correctly - could there be something I'm missing? When I bind with code-behind, it works fine, but I want to adhere to the mvvm pattern.
Thanks in advance.

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

嘦怹 2024-09-15 04:28:43

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

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

Try assigning the command inside your constructor, i.e.

public ViewModel() {
    _loaded = CreateAsyncRelayCommand(p => OnLoaded());
}
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文