したがって、私はWPFとMVVMにかなり慣れていないため、ここでTabControlに問題があり、タブを切り替えるときにデータを保持しようとしています。基本的に、ビュー内に TabControl があり、TabItems はユーザーの操作に基づいて動的にロードおよび削除されます。各 TabItem は、独自のビューモデルを持つ独自のビューである UserControl です。
TabItem が削除されるたびに (常に別のタブに移動するだけではなく、実際にタブが削除されて再作成されることもあります)、ビューモデルのインスタンスを保存してデータを保持していますが、タブが削除されたときにそのデータを取り戻すのに問題があります。再作成されました。データテンプレートを使用して TabItems を作成しています
<DataTemplate x:Key="MyView" DataType="{x:Type vm:MyViewModel}">
<uc:MyView />
</DataTemplate>
そしてTabControlでそれを参照します。
<TabControl ItemsSource="{Binding ViewModelList, Mode=TwoWay}"
ContentTemplate="{StaticResource MyView}"
ItemTemplate="{StaticResource MyHeader}"
SelectedIndex="{Binding SelectedTabIndex, Mode=TwoWay}" />
すべてが表示される限りすべてが機能しますが、毎回 UserControl の新しい空のバージョンを取得します。ViewModelList に設定された itemssource はまさにそのように聞こえます。各タブの状態を保存して再作成できるようにするビューモデル インスタンスのリストです。ここでの問題は、ここで使用されている DataTemplate アプローチでは、新しい TabItem が作成されるたびに作成されるビューの新しいインスタンスにビューモデル データを関連付ける方法が実際には提供されないことです。
私は MVVMLight または Prism を使用していませんが、ここで使用しようとした種類のカスタム EventAggregator があります。私が抱えている問題は、正しい時間にビューモデルの正しいインスタンスにデータを取得することです。私の問題の一部は、MyViews datacontext がコードビハインド コンストラクターで MyViewModel の新しいインスタンスに設定されており、私が試して渡したものをオーバーライドしていることだと思います...
これを修正する方法がわかりません。長い質問で申し訳ありませんが、すべてを網羅したかったのです。詳しい情報が必要な場合はお知らせください。よろしくお願いします。