'Unloaded'时System.Windows.Controls.UserControl加载事件触发

时间:2015-10-26 16:21:36

标签: c# wpf mvvm user-controls interaction

我遇到一个奇怪的现象,当父窗口的内容控件从当前窗口更改为新窗口时,UserControl加载事件就会触发。

我已经在多个UserControl上测试了这种行为,并且它正在所有这些上发生。

我做了什么:

窗口:

<xmlns:Controls="clr-namespace:MahApps.Metro.Controls;assembly=MahApps.Metro"/>

<Controls:TransitioningContentControl Transition="RightReplace" Content="{Binding CurrentViewModel}"/>

当我更改CurrentViewModel属性时,相应的View将加载到内容控件中。

用户控件:

<xmlns:i="http://schemas.microsoft.com/expression/2010/interactivity"/>

<i:Interaction.Triggers>
    <i:EventTrigger EventName="Loaded">
        <i:InvokeCommandAction Command="{Binding Load, Mode=OneWay}"/>
    </i:EventTrigger>
</i:Interaction.Triggers>

加载UserControl时(由于某种原因,UserControl更改为另一个),运行Load方法。

可能的解决方案:

我可以通过各种方法解决这个问题,例如我可以在Load方法中创建一个名为ShouldLoad的布尔属性,并使用if公式,但这对于我想要达到的目标而言似乎相当复杂

我觉得这种行为不应该发生,但可能有一个解释......

2 个答案:

答案 0 :(得分:1)

我目前在我的应用中遇到此问题。

到目前为止,我发现它与<Controls:TransitioningContentControl>,如何使用或放置位置有关。我将我的UI更改为仅使用<ContentControl>,并且我不再发生多个Loaded事件。它似乎也按预期用于<Controls:MetroContentControl>

答案 1 :(得分:0)

这对我帮助很大......事实证明,加载的事件会在许多情况下被触发,例如当标签控件被更改时。

http://blogs.msdn.com/b/mikehillberg/archive/2006/09/19/loadedvsinitialized.aspx