2

したがって、私は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 の新しいインスタンスに設定されており、私が試して渡したものをオーバーライドしていることだと思います...

これを修正する方法がわかりません。長い質問で申し訳ありませんが、すべてを網羅したかったのです。詳しい情報が必要な場合はお知らせください。よろしくお願いします。

4

1 に答える 1