我正在設置一個ListView,其Source
屬性被設置爲我的一個類的ivar,名爲Cat
。使用CollectionViewSource實現ListView - 不刷新?
每個Cat
有Trait
的ObservableCollection
對象:
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
更新。但是,我確定必須有一些我錯過的東西,因爲我希望界面在添加/刪除項目時進行更新。
編輯:的CollectionViewSource
被應用於ListView
在我的XAML文件:
<CollectionViewSource x:Name="CollectionViewSource" x:Key="CollectionViewSource" />
...
<ListView x:Name="ItemListView" ItemsSource="{Binding Source={StaticResource CollectionViewSource}}" ...
CollectionViewSource如何設置爲ListView? – Tyrsius 2011-12-19 23:49:42
@Tyrsius新增。 – 2011-12-20 00:39:28
@craig關於「這是多餘的嗎?一個比另一個好嗎?」評論:'_traits'是一個私人成員,不需要傳遞給'OnPropertyChanged' - 畢竟,沒有任何綁定它來接收更新通知。 'OnPropertyChanged(「Traits」);'就足夠了。 – 2011-12-20 01:01:55