假如專案中有三個頁面,頁面a,b,c,每個頁面有自己的vm,如果要在a頁面中嵌入c頁面,b頁面嵌入c頁面,c頁面用單例模式加載vm,c頁面viewmodel設定一個name值為1,假如在a頁面更改name值為2,這樣的話回到b頁面發現name值也為2,我現在想要的效果是,c頁面對應一個viewmodel,怎么樣讓vm互不影響。我現在的問題是,如果a頁面中c的vm實體化一次,b頁面中的vm實體化一次倒也可以實作互不影響,但是我在c頁面vm中注冊了訊息Messenger.Default.Register這樣就會注冊兩次,當我觸發訊息時,該訊息也會執行兩次,有什么方案可以完美解決這個問題嘛
uj5u.com熱心網友回復:
不要使用單例viewmodel吧,a中的c和b中的c的viewmodel不能是同一個,同一個相當于你a中的c和b中的c是一樣的,c的viewmodel每次都重新new一下uj5u.com熱心網友回復:
那我在c中注冊的訊息就會注冊兩次,即一個命令執行了c中的訊息兩次uj5u.com熱心網友回復:
a中的c和b中的c都不是同一個物件,怎么可能注冊2次?都不是同一個物件,怎么注冊上去2次事件的?c物件你也不能用單例的,也要分別new
uj5u.com熱心網友回復:
那我在c中注冊的訊息就會注冊兩次,即一個命令執行了c中的訊息兩次
不要使用單例viewmodel吧,a中的c和b中的c的viewmodel不能是同一個,同一個相當于你a中的c和b中的c是一樣的,c的viewmodel每次都重新new一下
a中的c和b中的c都不是同一個物件,怎么可能注冊2次?都不是同一個物件,怎么注冊上去2次事件的?c物件你也不能用單例的,也要分別new
我是用這種方式注冊訊息的,來實作各個viewmodel之間的互動,Messenger.Default.Register,這種方式是一種全域注冊的,雖然new兩次但是觸發該訊息時,是會觸發兩次的,是我注冊方式不對嗎
uj5u.com熱心網友回復:
Messenger.Default.Register看看有沒有引數或者哪里可配置,是不是這個方法注冊出來是單例的?轉載請註明出處,本文鏈接:https://www.uj5u.com/net/55385.html
標籤:C#
