我遇到一个奇怪的现象,当父窗口的内容控件从当前窗口更改为新窗口时,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
公式,但这对于我想要达到的目标而言似乎相当复杂
我觉得这种行为不应该发生,但可能有一个解释......
答案 0 :(得分:1)
我目前在我的应用中遇到此问题。
到目前为止,我发现它与<Controls:TransitioningContentControl>
,如何使用或放置位置有关。我将我的UI更改为仅使用<ContentControl>
,并且我不再发生多个Loaded事件。它似乎也按预期用于<Controls:MetroContentControl>
。
答案 1 :(得分:0)
这对我帮助很大......事实证明,加载的事件会在许多情况下被触发,例如当标签控件被更改时。
http://blogs.msdn.com/b/mikehillberg/archive/2006/09/19/loadedvsinitialized.aspx