【发布时间】:2017-08-01 12:53:24
【问题描述】:
我像这样多次初始化 UserControl 的视图模型
ChartControl = new SciChartControlViewModel(true, false, true);
视图是通过ContentControl 渲染的
<Grid Grid.Row="1">
<ContentControl Content="{Binding ChartControl}"/>
</Grid>
我像这样在视图中挂钩Loaded 事件
<i:Interaction.Triggers>
<i:EventTrigger EventName="Loaded">
<i:InvokeCommandAction Command="{Binding OnViewLoadedCommand}"/>
</i:EventTrigger>
</i:Interaction.Triggers>
问题:只有在第一次初始化视图模型时,Loaded 事件才会触发。当我随后再次初始化视图模型时,Loaded 事件不再被触发。只有当控件失去焦点并重新聚焦时,它才会触发。
期望的行为:如何确保每次完全渲染视图时在我的视图模型中捕获?我需要捕获这一点,因为我在视图模型中对此控件执行的某些操作仅在视图完全呈现时才有效。
【问题讨论】:
-
您尝试过
DataContextChanged事件吗?如果您绑定到Content属性,不确定这是否有效。否则,您可以覆盖Content依赖属性的元数据,描述为 here -
@JanDotNet,太棒了,这行得通。尽管它仍然让我感到困惑,为什么每次丢弃当前视图模型实例并实例化一个新视图模型实例时都不会触发 Loaded 事件。可能是因为视图保持在原位,因此不会在后续视图模型实例中加载,但数据上下文会发生变化?请随时写一个快速的答案,很高兴将其标记为所需的答案...
标签: wpf view render viewmodel eventtrigger