2017-06-02 32 views
-1

所以我有一個ICollectionView設置爲基於ComboBox的自定義控件的ItemsSource。如何更新ICollectionView的項目?獲取「操作無效,而ItemsSource正在使用。[...]」

我可以將它設置得很好,但我得到這個我不能與新項目更新:當是的ItemsSource使用

操作無效。改爲使用ItemsControl.ItemsSource訪問和修改 元素。

通過

viewModel.TheICollectionView = new CollectionView(CollectionViewSource.GetDefaultView(viewModel.OriginalList)); 

它獲取由事件處理程序,只要OriginalList改變叫做嘗試它的時候。

的的ItemsSource設置是這樣的:

<controls:CustomComboBox ItemsSource="{Binding Path=TheICollectionView}"/> 

然後在自定義控件我有事件處理OnItemsSourceChanged,我做的事:

TheComboBox.Items.Clear(); 
TheComboBox.ItemsSource = _itemsSource; 

誤差在Items.Clear()

的投對這個錯誤的其他答案沒有幫助。

+0

向我們展示如何設置ItemsControl的ItemsSource。 – dymanoid

+0

@dymanoid:更新了問題。它工作得很好,顯示第一次讀入。 – mYnDstrEAm

+1

你如何從'viewModel.TheICollectionView'到'Path = LabelsList'?也許你應該退後一步,更加註意你的問題。或者你希望我們用我們時尚的任何幻想填補空白......? ;-) – elgonzo

回答

0

只需添加項目到OriginalList集合視圖模式:

public ICollectionView TheICollectionView { get; set; } 

public ObservableCollection<int> OriginalList { get; set; } = new ObservableCollection<int>(); 

public void Method() 
{ 
    TheICollectionView = new CollectionView(CollectionViewSource.GetDefaultView(OriginalList)); 
    ... 
    OriginalList.Add(1); 
} 

不能新項目時,您已設置的ItemsSource屬性添加到收藏Items ComboBox的。

+0

它們被添加到OriginalList _before_我打算更新TheICollectionView以匹配這些項目。無論何時OriginalList發生更改,該分配都將在EventHandler中執行。 – mYnDstrEAm

+0

嘗試更新ICollectionView與更新源集合是一回事。那你怎麼「更新」? – mm8

+0

這是我實際上想要做的高級別事情,可能不等同於任何WPF意義上的更新。但我不確定它會如何。我首先更新OriginalList,然後我想更新TheICollectionView,它被設置爲我的CheckBox自定義控件的ItemsSource。 – mYnDstrEAm

相關問題