2011-07-22 113 views
1

我有3列(用戶名稱,活性,和集團)的ItemsSource綁定到的StaticResource刷新數據

ItemsSource="{Binding Source={StaticResource SortedUsers}, UpdateSourceTrigger=PropertyChanged}" 

靜態資源被定義爲一個ListView:

<CollectionViewSource x:Key="SortedUsers" Source="{Binding UsersList, UpdateSourceTrigger=PropertyChanged}"> 
      <CollectionViewSource.SortDescriptions> 
       <scm:SortDescription 
       Direction="Ascending" 
       PropertyName="UserName" /> 
      </CollectionViewSource.SortDescriptions> 
</CollectionViewSource> 

用戶可以選擇列表中的一個項目,然後單擊「修改」以更改有關用戶的信息,或者可以單擊「添加」按鈕將新用戶添加到列表中。 「添加」和「修改」都使用相同的模式對話框來允許設置/修改新用戶。添加一個用戶可以正常工作,一旦模式對話框關閉,新用戶將顯示在列表中。但是,修改現有用戶不會更新ListView中的數據,直到包含listview的窗口關閉然後重新打開。我需要做什麼才能讓ListView更新修改?

回答

1

難道ü嘗試使用

((CollectionViewSource)this.FindResource("SortedUsers")).View.Refresh(); 

雖然MVVM上述步驟不會被允許。 因此,如果源集合(UsersList)是ObservableCollection集合視圖源,將自動刷新收集已更改的UsersList通知。

讓我知道這是否有幫助。

1

你的數據對象是否實現INotifyPropertyChanged接口?

請參見:https://stackoverflow.com/questions/6713288/databinding-fail-after-using-controltemplate/6713334#6713334

INotifyPropertyChanged的通知有什麼東西在實現它的類改變了UI。注意:我不知道你用什麼類型的集合來保存你的類(它被傳入CollectionViewSource),但我幾乎總是使用ObservableCollections。它們實現了CollectionChanged,並在項目添加,刪除和刷新集合時通知UI。

+0

感謝您的時間。對象實現INotifyPropertyChanged,列表是一個ObservableCollection。如果項目被添加到列表中,列表將會增長,但由於某些原因,如果數據更改,網格中的各個字段不會更新。也許包含字段數據的底層對象不會實現INotifyPropertyChanged。 – ihatemash