2014-02-11 65 views
3

更新UI我有一個容器,比如一個列表框,組合框等,其ItemsSource屬性綁定到一個觀察集合在我的視圖模型。 當我嘗試添加/通過在我的虛擬機的一些方法從集合中刪除的項目不會在UI反映, 的UI實際上刷新的唯一方法是,如果我給你收集了新的值(即另一收集相關數據),這迫使他重新綁定整個藏品。WPF MVVM列表框/組合框的ItemsSource將不會從視圖模型

也許我缺少/不明白一些關於收集綁定的問題,如果任一方式有人有一個解決方案/很好的解釋/都將是巨大的。 這裏是從我查看樣本(在這種情況下,它是一個列表框)

<ListBox 
       Grid.Row="9" 
       Grid.Column="1" 
       Grid.ColumnSpan="3" 
       Width="200" 
       Height="200" 
       ItemsSource="{Binding PreSavedRecordingScheduleList,UpdateSourceTrigger=PropertyChanged}" 
       SelectedItem="{Binding SelectedPreSavedRecordingSchedule,UpdateSourceTrigger=PropertyChanged}" 
       DisplayMemberPath="Display"/> 

這裏是我的ViewModel:

private ObservableCollection<ScheduledRecordingObject> m_PreSavedRecordingScheduleList; 

PreSavedRecordingScheduleList = new ObservableCollection<ScheduledRecordingObject>(); 

public ObservableCollection<ScheduledRecordingObject> PreSavedRecordingScheduleList 
     { 
      get 
      { 
       return m_PreSavedRecordingScheduleList; 
      } 
      set 
      { 
       m_PreSavedRecordingScheduleList = value; 
       OnPropertyChanged("PreSavedRecordingScheduleList"); 
      } 
     } 

ScheduledRecordingObject也實現INotifyPropertyChanged。

+2

顯示你的代碼的企圖到目前爲止 – Sheridan

+0

只是爲了更好的理解 - 你的集合中的初始值在列表框中顯示? – blindmeis

+0

是,顯示初始值。我可以例如在C'tor添加幾個項目,他們將是可見的用戶,但任何更改後我做(添加/刪除/清除等)沒有刷新UI – user1531186

回答

0

視圖模型

public ObservableCollection<yourType> MyItemsSource {get;set} 

在構造器初始化一次,並用清晰,添加和刪除改變它

視圖

<ListBox ItemsSource="{Binding MyItemsSource}"/> 

僅僅是一定正確的DataContext設置。

這就是它應該如何看在你的代碼

編輯: 一些提示,以你的發佈代碼:

//remove the UpdateSourceTrigger=PropertyChanged - makes no sense the Mode is OneWay anyway :) 
ItemsSource="{Binding PreSavedRecordingScheduleList}" 

//the following line should just called once and at best in ctor 
//but the binding will of course work too when you assign a new collection 
PreSavedRecordingScheduleList = new ObservableCollection<ScheduledRecordingObject>(); 

一切的一切你的代碼看起來不錯,如果視圖模型是DataContext的你列表框然後它應該工作。讓我知道什麼探聽出:)

+0

謝謝我已經試過了,它說你使用清除/添加/刪除來改變集合的部分不起作用。 – user1531186

+0

請在運行時使用snoop檢查您的初始綁定是否損壞。並請張貼一些代碼 – blindmeis

+0

直到現在還不知道這樣的工具,所以我只是下載它,我會試一試。 – user1531186

0

刪除OnPropertyChanged( 「PreSavedRecordingScheduleList」);來自ObservableCollection。其實你不需要支持領域。上的ObservableCollection附加CollectionChanged事件,像這樣

1裏面的視圖模型構造附加事件CollectionChanged

PreSavedRecordingScheduleList = new ObservableCollection<ScheduledRecordingObject>(); 

PreSavedRecordingScheduleList.CollectionChanged += PreSavedRecordingScheduleList_CollectionChanged; 

2-在事件處理程序注入OnPropertyChanged( 「PreSavedRecordingScheduleList」)

void PreSavedRecordingScheduleList_CollectionChanged(object sender, System.Collections.Specialized.NotifyCollectionChangedEventArgs e) 
    { 
     OnPropertyChanged("PreSavedRecordingScheduleList"); 
    }