2017-06-01 221 views
0

我爲我的應用程序使用MVVM Light,並且我還實現了用於返回/在頁面之間的INavigationService。ViewModel事件多次觸發

因此,在一個常見的場景,是這樣的

的MainPage>分類>大紅大紫>數據頁。

在DataPage中,我提出取回結果的請求,並根據回調返回的結果調用.GoBack()方法從堆棧彈出當前頁面並返回Rounds。

我注意到的是,如果我先打DataPage和.GoBack()被調用,然後點擊不同的回合,回調方法將被觸發兩次,如果我回來並再次三次,並且像這樣繼續。

本質上這意味着.GoBack()將被再次調用,並導航導致混亂。我相信這與不清理以前的VM有關,我試圖用SimpleIOC的UnRegister/Register類改變這種行爲,但沒有運氣。

+0

聽起來你,但掛鉤的情況下,當你進入你離開時不脫鉤了。我會從回調中的事件中刪除回調。 – Slepz

+0

@Slepz我試圖做到這一點,現在以另一種方式做了,請檢查我提出的答案並告訴我您的評論。 –

回答

0

在ViewModel類

public void UnsubscribeFromCallBack() 
{ 
    this.event -= method; 
} 

在.xaml.cs頁面

protected override void OnDisappearing() 
    { 
     base.OnDisappearing(); 
     PageViewModel vm = (this.BindingContext as PageViewModel); 
     vm.UnSubscribeFromCallback(); 
    } 
+0

這應該很好 – Slepz

+0

@Slepz思考mvvm模式,你認爲它可以寫在一個更有效的方式? –

+0

假設你正在重用這些視圖模型和視圖,並且不知道更多的上下文,我會說這是最好的方法。或者,您可以在視圖模型構造函數中掛鉤事件並在析構函數中解除掛鉤。然後使用OnAppearing和OnDisappearing設置是否忽略該事件的標誌(如果您甚至需要忽略它) – Slepz