MVVM light RelayCommand 触发两次
MVVM light RelayCommand triggers twice
我正在开发一个新的 c# MVVM 轻型现代 ui WPF 应用程序,我 运行 遇到了一些奇怪的触发器行为。因此,为了描述这种情况,以下是:
我有一个带触发器的 XML 视图。 (加载方法为例)
<i:Interaction.Triggers>
<i:EventTrigger EventName="Loaded">
<i:InvokeCommandAction Command="{Binding LoadedCommand}" />
</i:EventTrigger>
</i:Interaction.Triggers>
带有中继命令的构造函数(来自抽象模型的 LoadedCommand)
public MovieListModel()
{
LoadedCommand = new RelayCommand(LoadData);
}
private void LoadData()
{
Debug.WriteLine("MovieListModel - LoadData");
}
问题:
当应用程序启动时,loadedcommand 被调用 1 次(良好)。当我导航到应用程序内的另一个页面时,第一个视图和新视图 LoadedCommand 都会被触发。其他命令也被触发两次。我猜想如果我稍后想在其中放入一些编程逻辑,这将成为一个问题。
完整的debug.writeline如下:
ModernUserControl - OnNavigatingFrom
MovieListModel - NavigatingFrom
ModernUserControl - OnNavigatingFrom event called
ModernUserControl - OnNavigatedFrom
MovieListModel - NavigatedFrom
ModernUserControl - OnNavigatedFrom event called
ModernUserControl - OnNavigatedTo
MovieListModel - LoadData
SettingsModel - LoadData
信息:
我在此处找到的示例程序中发现了这个问题:https://github.com/saramgsilva/ModernUISamples 并且在我自己的应用程序中。我还在 github 上开了一张票,看看这是否是 problem/bug。 (还没有回复)
我建议避免 WPF 中的 Loaded
事件,因为代码只应 运行 一次。
WPF 会卸载未使用的控件(例如应用程序最小化或更改标签页),因此 Loaded
命令通常会 运行 不止一次。
如果代码只打算 运行 一次,我通常会把它放在构造函数中或在 getter.
中延迟加载数据
如果我真的想将 Loaded
事件用于仅用于 运行 一次的事件,我将确保在事件 运行是第一次。
加载事件触发两次
阅读此博客post 对其进行解释:http://blogs.msdn.com/b/mikehillberg/archive/2006/09/19/loadedvsinitialized.aspx
或者更好的是,阅读另一个 post 的答案:
Loaded event of a WPF user control fire two times
我正在开发一个新的 c# MVVM 轻型现代 ui WPF 应用程序,我 运行 遇到了一些奇怪的触发器行为。因此,为了描述这种情况,以下是:
我有一个带触发器的 XML 视图。 (加载方法为例)
<i:Interaction.Triggers>
<i:EventTrigger EventName="Loaded">
<i:InvokeCommandAction Command="{Binding LoadedCommand}" />
</i:EventTrigger>
</i:Interaction.Triggers>
带有中继命令的构造函数(来自抽象模型的 LoadedCommand)
public MovieListModel()
{
LoadedCommand = new RelayCommand(LoadData);
}
private void LoadData()
{
Debug.WriteLine("MovieListModel - LoadData");
}
问题: 当应用程序启动时,loadedcommand 被调用 1 次(良好)。当我导航到应用程序内的另一个页面时,第一个视图和新视图 LoadedCommand 都会被触发。其他命令也被触发两次。我猜想如果我稍后想在其中放入一些编程逻辑,这将成为一个问题。
完整的debug.writeline如下:
ModernUserControl - OnNavigatingFrom
MovieListModel - NavigatingFrom
ModernUserControl - OnNavigatingFrom event called
ModernUserControl - OnNavigatedFrom
MovieListModel - NavigatedFrom
ModernUserControl - OnNavigatedFrom event called
ModernUserControl - OnNavigatedTo
MovieListModel - LoadData
SettingsModel - LoadData
信息: 我在此处找到的示例程序中发现了这个问题:https://github.com/saramgsilva/ModernUISamples 并且在我自己的应用程序中。我还在 github 上开了一张票,看看这是否是 problem/bug。 (还没有回复)
我建议避免 WPF 中的 Loaded
事件,因为代码只应 运行 一次。
WPF 会卸载未使用的控件(例如应用程序最小化或更改标签页),因此 Loaded
命令通常会 运行 不止一次。
如果代码只打算 运行 一次,我通常会把它放在构造函数中或在 getter.
中延迟加载数据如果我真的想将 Loaded
事件用于仅用于 运行 一次的事件,我将确保在事件 运行是第一次。
加载事件触发两次
阅读此博客post 对其进行解释:http://blogs.msdn.com/b/mikehillberg/archive/2006/09/19/loadedvsinitialized.aspx
或者更好的是,阅读另一个 post 的答案: Loaded event of a WPF user control fire two times