後、私はそうのようなSystem.Windows.Interactivity
を使用してLoadedCommand
を結合しています:処分は、実行
<i:Interaction.Triggers>
<i:EventTrigger EventName="Loaded">
<i:InvokeCommandAction Command="{Binding LoadedCommand}" />
</i:EventTrigger>
</i:Interaction.Triggers>
、ビューがロードされたときに私の見解モデルに私がデータをロードしています:
LoadedCommand = ReactiveCommand.CreateFromTask(LoadData);
マイ問題は、Loadedイベントが親ビューによって実際に複数回トリガーされることです。 loaddataのメソッドにnullに
async Task LoadData()
{
if (didLoad) return;
...
}
私はコードビハインドでコードを書くことを避けようとしていました。もし私がそこに書き込もうとしたら、Observable.FromEventPattern(this、LoadedEvent.Name).Take(1).Subscribe(async _ => ViewModel.LoadData()); 'Take(1)'は私の 'Observable'を処分すべきですか? – DobleA
ロードされたときに一度しか起こらず、あなたの正確な必要性にはおそらくOKであればうまくいくでしょう。私のコードは、実際のロードごとに正しく実行され、ダブルコールをスキップし、アンロード時にすべてのリソースを処分します。私は、特に私がクリーンアップする必要があるコードの背後からグローバルリソースに登録する場合は、常にそれを使用します。 FromEventPatternはむしろFuglyです。私はReactiveUI.Eventsの使用をお勧めしますが、それは味の問題であり、重要ではありません。また、コードの背後を避けてはいけません。 XAMLでいくつかのことをやろうとするのはちょっとした痛みです。 – bradgonesurfing
洞察に感謝します! – DobleA