私は、Sourceプロパティが私のクラスのivarに設定されているListViewの設定に取り組んでいますCat。
それぞれCatにオブジェクトがObservableCollectionあります。Trait
private ObservableCollection<Trait> _traits = new ObservableCollection<Trait>();
public ObservableCollection<Trait> Traits
{
get
{
return _traits;
}
}
public void AddTrait(Trait t)
{
_traits.Add(t);
// Is this redundant? Is one better than the other?
this.OnPropertyChanged("_traits");
this.OnPropertyChanged("Traits");
}
public IEnumerator<Object> GetEnumerator()
{
return _traits.GetEnumerator();
}
次に、このコレクションにSourceプロパティを割り当てます。Traits
this.CollectionViewSource.Source = CurrentCat.Traits;
これは正しく機能し、Traitオブジェクトは私のに正しく表示されますListView。
問題は、この基になるコレクションを変更して_traitsも、UIが正しく更新されないことです。たとえば、これは次のとおりです。
void AddTraitButton_Click(object sender, RoutedEventArgs e)
{
if (this.CurrentCat != null)
{
this.CurrentCat.AddTrait(new Trait());
}
}
UIですぐに効果がないようですが、次のSourceようにプロパティをリセットすると、次のようになります。
var oldSource = this.CollectionViewSource.Source;
this.CollectionViewSource.Source = null;
this.CollectionViewSource.Source = oldSource;
その後、ListView適切に更新します。ただし、アイテムの追加/削除時にUIを更新したいので、不足しているものがあるはずです。
編集:は私のXAMLファイルCollectionViewSourceに適用されています:ListView
<CollectionViewSource x:Name="CollectionViewSource" x:Key="CollectionViewSource" />
...
<ListView x:Name="ItemListView" ItemsSource="{Binding Source={StaticResource CollectionViewSource}}" ...