セットアップ: 0...n 個のタブを持つタブ コントロールがあり、各タブはクラスにバインドされています。
class MyTabItem
{
string Text {get; set;}
int ID {get; set;}
ISet<MyTabContent> Contents {get; set;}
}
Class MyTabContent
{
int ID {get; set;}
string Subtext {get; set;}
}
各 tabitem クラスには、そのセット内に多くの tabcontent クラスがあります。(全体は NHibernate 経由でフェッチされます)。
MyTabItem のコンテンツを各タブコントロール項目のヘッダーにバインドし、MyTabContent のコンテンツを各タブコントロール項目のコンテンツのデータグリッドにバインドするために多くのことを試みました。
タブにすべてのコンテンツを表示できますが、バインドされたクラスのプロパティを変更しても UI が更新されません。InvalidateVisual を呼び出そうとし、Render イベントを Dispatch しようとし、バインディングで UpdateTarget と UpdateSource を試みました (最後の 2 つは例外をスローしました)。ビューモデルに INotifyPropertyChanged を実装しましたが、手動で OnPropertyChanged("MyTabItem") を使用しても無駄でした。
バインドされたクラスのプロパティを変更すると、タブコントロールの内容が更新されない理由が本当にわかりません。私は2つの異なるバインディング戦略を試しました。どちらもコンテンツの表示には機能しますが、コンテンツが変更されてもどちらも更新されません。
私のXAMLセットアップは次のとおりです。
<TabControl>
<TabControl.ItemTemplate>
<DataTemplate DataType="models:MyTabItem">
<TextBlock Text="{Binding Text}" />
</DataTemplate>
</TabControl.ItemTemplate>
<TabControl.ContentTemplate>
<DataTemplate DataType="models:MyTabItem">
<DataGrid ItemsSource="{Binding Contents}">
<DataGrid.Columns>
<DataGridTextColumn Binding="{Binding Path=Subtext}" />
</DataGrid.Columns>
</DataGrid>
</DataTemplate>
</TabControl.ContentTemplate>
</TabControl>
その XAML セットアップでは、tabcontrol.Items.Add(new MyTabItem) を使用して項目をタブ コントロールに追加するだけです。
次に、コード ビハインドで tabcontrol.Itemsource を ObservableCollection にバインドする別の XAML セットアップを試しました。繰り返しますが、バインドされたプロパティが変更された場合、タブのコンテンツは更新されませんでした:(
また、ViewModel で CurrentItem プロパティを作成し、それを Window.Resource として使用してから、Tabcontrol の内容を
{Binding Source={StaticResource CurrentItem}, Path=Text}
タブを変更するたびに、ビューモデルの CurrentItem を更新しましたが、それによって変更も更新されませんでした。
私はほとんどアイデアがありません:(