TabControlのItemSourceとしてObservableCollectionがあります。 MyClassはINotifyPropertyChangedインターフェイスを実装し、フィールド「Header」を持ちます。 コレクション内のMyClassメンバーを更新すると、対応するTabItemヘッダーは更新されません。バインドされたコレクションからのTabItemヘッダーの更新
なぜですか?
はここで非常に簡単な例です:
のMyClass:
public class MyClass : INotifyPropertyChanged
{
private string header;
public string Header
{
get
{
return header;
}
set
{
header = value;
OnPropertyChanged(new PropertyChangedEventArgs("Header"));
}
}
public event PropertyChangedEventHandler PropertyChanged;
protected void OnPropertyChanged(PropertyChangedEventArgs e)
{
PropertyChanged?.Invoke(this, e);
}
public override string ToString()
{
return Header;
}
}
メインウィンドウC#:
public partial class MainWindow : Window
{
public ObservableCollection<MyClass> test;
public MainWindow()
{
InitializeComponent();
test = new ObservableCollection<MyClass>();
MyTabControl.ItemsSource = test;
}
private void Add_Click(object sender, RoutedEventArgs e)
{
test.Add(new MyClass() { Header = "DefaultHeader" });
}
private void Change_Click(object sender, RoutedEventArgs e)
{
if(test.Count != 0) Test[0].Header = "Update!";
}
}
メインウィンドウXAML:
<Grid>
<Grid.RowDefinitions>
<RowDefinition></RowDefinition>
<RowDefinition></RowDefinition>
<RowDefinition></RowDefinition>
</Grid.RowDefinitions>
<TabControl Grid.Row="0" x:Name="MyTabControl" />
<Button Content="Add item" Grid.Row="1" Click="Add_Click" />
<Button Content="Change header" Grid.Row="2" Click="Change_Click" />
</Grid>
任意のアイデアは?前もって感謝します!