できるだけ詳しく問題を説明しようとします。私のアプリケーションはmvvmを使って構成され、いくつかの静的ビューを読み込むシェルビューを持っています。 heresが質問1になる: shellviewmodelでこれらのビューモデルをインスタンス化するのがよい方法ですか?ReactiveUIビューインジェクション。どうすればいいのですか?
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になったときにリストから削除されます。しかし、これらのアイテムを適切に処分する方法がわかりません。 navigateメソッドで新しいインスタンスを作成すると、古い新しいProductionOrderDetailViewModelが破棄されますか?どうすればいいですか? 正解に必要な部分が欠けていると思いますので、お尋ねください。必要な情報をお送りします。
事前に感謝し、よろしく
ここで間違った言葉を使っているような気がします。 '' itemsleftプロパティが0になったときにアイテムがリストから削除されます.'' ''あなたのitemleftプロパティが0になったときに送信者がリストから削除されるということですか? – bradgonesurfing