簡體   English   中英

MVVM指示燈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>

具有relaycommand的構造函數(抽象模型中的LoadedCommand)

    public MovieListModel()
    {
        LoadedCommand = new RelayCommand(LoadData);
    }        
    private void LoadData()
    {
        Debug.WriteLine("MovieListModel - LoadData");
    }

問題:應用程序啟動時,被加載的命令被調用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上開始了一張票,以了解這是否是問題/錯誤。 (尚未回復)

我建議避免在WPF中避免只應運行一次的代碼中的Loaded事件。

WPF卸載不使用的控件(例如,如果應用程序已最小化,或者您更改了選項卡頁),因此“ Loaded命令通常會運行一次以上。

如果代碼只打算運行一次,我通常將其放入構造函數中或將其延遲加載到getter中。

如果我真的想將Loaded事件用於只可以運行一次的事件,那么我將確保在第一次運行時從Loaded事件處理程序中分離該事件。

加載的事件觸發兩次。

閱讀此博客文章對其進行解釋: http : //blogs.msdn.com/b/mikehillberg/archive/2006/09/19/loadedvsinitialized.aspx

甚至更好的是,從另一篇文章中閱讀以下答案: WPF用戶控件的Loaded事件觸發兩次

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM