我會盡可能詳細地解釋我的問題。我的應用程序使用mvvm編寫,並有一個加載一些靜態視圖的shellview。繼承人問題1: 在shellviewmodel中實例化這些視圖模型是否是一種很好的做法?ReactiveUI Viewinjection。如何做到這一點
public ShellViewModel(IScreen screen)
{
HostScreen = screen;
LogoViewModel = new LogoViewModel(HostScreen);
...
StatusViewModel = new StatusViewModel();
}
反正我也有有一個列表,它的ItemSource屬性當用戶選擇了一個新的列表項被綁定到一個ReactiveList現在
public ShiftOrderView()//ShiftOrderViewModel viewModel)
{
InitializeComponent();
this.WhenActivated(
d =>
{
this.OneWayBind(ViewModel, vm => vm.ProductionOrderList, v => v.ShiftOrder.ItemsSource).AddTo(d);
});
}
這個項目顯示在另一個視圖靜態視圖。我目前通過導航做到這一點
this.WhenActivated(d =>
{
this.WhenAnyObservable(o => o.ProductionOrderList.ItemChanged)
.Where(x => x.PropertyName == "ItemsLeft")
.Select(x => x.Sender)
.Where(x => x.ItemsLeft == 0)
.Subscribe(x =>
{
ProductionOrderList.Remove(x);
}).AddTo(d);
this.WhenAnyValue(vm => vm.SelectedProductionOrderViewModel).Where(pvm => pvm != null)
.Subscribe(pvm =>
{
HostScreen.Router.NavigateAndReset.Execute(
new ProductionOrderDetailViewModel(HostScreen,
Locator.CurrentMutable.GetService<IProductionItemService>(), pvm));
}).AddTo(d);
});
但我認爲這是不正確的方式,並引入了內存泄漏。正如你在上面的代碼中看到的,當itemsleft屬性達到0時,項目從列表中移除。但是我不知道如何正確處理這些項目。如果我在導航方法中創建新實例,舊的新ProductionOrderDetailViewModel會被丟棄嗎?如果不是我怎麼能做到這一點? 我相信我錯過了一些正確答案所需的部分,所以請問,我會提供您需要的信息。
在此先感謝和親切的問候
我有一種感覺,你在這裏使用了錯誤的單詞。 '當itemsleft屬性達到0時,項目從列表中移除。你的意思是''當發送者的itemsleft屬性達到0時,發件人會從列表中刪除 – bradgonesurfing