WPF,“Loaded”事件仅在第一次视图模型初始化时触发,但不会在后续视图模型初始化时触发
WPF, `Loaded` event is only fired on first viewmodel initialization but not subsequent ones
我像这样多次初始化 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
属性 是否有效。否则,您可以覆盖内容依赖项 属性 的元数据,如 here.
所述
我像这样多次初始化 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
属性 是否有效。否则,您可以覆盖内容依赖项 属性 的元数据,如 here.