【问题标题】:Interaction EventTrigger ignores window Loaded event but not the others交互 EventTrigger 忽略窗口加载事件但不忽略其他事件
【发布时间】:2017-10-31 14:33:26
【问题描述】:

我有一个交互窗口,加载时应该执行命令:

<i:Interaction.Triggers>
    <i:EventTrigger EventName="Loaded">
        <i:InvokeCommandAction Command="{Binding ActivateCommand}" />
    </i:EventTrigger>
    <i:EventTrigger EventName="Closed" >
        <i:InvokeCommandAction Command="{Binding DeactivateCommand}" />
    </i:EventTrigger>
</i:Interaction.Triggers>

它是这样使用的:

var loginVM = new Login();
var loginView = new Views.Login();
loginView.DataContext = loginVM;
loginView.ShowDialog();

当使用视图模型定位器通过 xaml 设置登录视图 DataContext(视图模型)时,EventTrigger 可以正常工作并在 VM 上执行命令。

但是,如果我像上面的示例那样从代码中设置DataContext(视图模型),则视图模型上的命令不会被执行!?

我还可以确认 Loaded 事件是在窗口显示之前触发的,所以在示例中设置了 DataContext 之后......所以设置了数据上下文,事件触发但由于某种原因命令没有被调用。

除了Loaded 之外的任何其他活动都完美无缺,所以我完全感到困惑......

【问题讨论】:

  • 您是否考虑过将loginVM 传递给构造函数并在那里设置DataContext
  • 是的,我已经看到了解决方法...但是刚刚找到了问题的答案...

标签: c# wpf


【解决方案1】:

好的,我可以确认这是一个BUG,发生在你设置SizeToContent时:

XAML 中存在 SizeToContent 会中断窗口的加载事件 https://github.com/Microsoft/dotnet/issues/429

EventToCommand for Loaded event not working as expected if Window.SizeToContent = WidthAndHeight

【讨论】:

  • 我无法使用 VS2017 v15.5、Win10 v1709.16299.19、.net 4.7.1(已安装)复制它
  • 如果您安装 .net 4.7.1,它将触及从 4.0 到 4.7.x 的所有版本。重要的是您安装了什么,而不是选择什么作为目标框架
  • 我的目前是 4.7
猜你喜欢
  • 2016-05-24
  • 1970-01-01
  • 2018-06-12
  • 1970-01-01
  • 1970-01-01
  • 2023-02-14
  • 1970-01-01
  • 1970-01-01
  • 2018-08-31
相关资源
最近更新 更多