我在,我在.NET WPF應用程序綁定一個DataGrid有組合框。所述categoryViewSource定義如下使用PropertyChanged.Fody NuGet包組合框項目時集合改變使用的ObservableCollection
<CollectionViewSource x:Key="categoryViewSource" d:DesignSource="{d:DesignInstance {x:Type Models:Category}, CreateList=True}"/>
我的類別模型實現INotifyPropertyChanged。我加載使用實體框架數據庫中的數據後,我分配數據到CollectionViewSource如下:
var db = new MyDbContext();
System.Windows.Data.CollectionViewSource categoryViewSource = (System.Windows.Data.CollectionViewSource)this.Resources["categoryViewSource"];
await db.Categories.LoadAsync();
categoryViewSource.Source = db.Categories.Local;
因此它必然要觀察集合。但是,一旦我做
var c = new Category { Name="New Category" };
db.Categories.Add(c);
我CollectionViewSource是(至少在調試器)更新,這似乎是合乎邏輯的,它的來源是一個ObservableCollection。但即使我做
categoryViewSource.View.Refresh();
我的組合框ItemsSource不更新。我試着用IsSynchronizedWithCurrentItem="True"
在StackOverflow上看到的地方。到目前爲止,它僅適用,如果我做這樣的事情:
categoryViewSource.Source = null;
categoryViewSource.Source = db.Categories.Local;
但後來我的SelectedItem屬性是所有組合框爲空,它們顯示在DataGrid空的,因爲的SelectedItem的明顯的情況下,一旦你重新分配集合不同。
有沒有人有解決方案。不幸的是,我對WPF仍然很陌生,不知道。
我試了一下,並沒有奏效。 事情是,'ObservableCollection'確實得到更新。我的'db.Categories.Local'是'ObservableCollection ',它會更新,'CollectionViewSource.Source'只是一個參考,對不對?無論如何,如果我在'db.Categories.Add(c)'之後進行調試,我的categoryViewSource確實會在其View.InternalList中顯示一個新項目。 我在Converter中爲ItemsSource放置了一個斷點,看看是否有東西,但是轉換器永遠不會觸發,所以不知何故綁定到categoryViewSource不起作用? –
LeoReentry
db.Categories與ObservableCollection不是同一個集合。如果將ComboBox的ItemsSource屬性直接設置爲ObservableCollection:categoryValues.ItemsSource = _cats; – mm8
好吧,如果我直接將它作爲ItemsSource添加,那確實有效。但是,如果我通過單獨的綁定添加集合,它不起作用。我需要通過轉換器傳遞集合。有沒有辦法自動做到這一點? – LeoReentry