を使用して変更したときに、私は次のように私は、.NET WPFアプリケーションにバインドするDataGrid内のComboBoxを持っている:コンボボックスのアイテムコレクションのObservableCollection
<ComboBox x:Name="categoryValues" MinWidth="70"
IsSynchronizedWithCurrentItem="False"
SelectedValuePath="Id"
ItemsSource="{Binding Source={StaticResource categoryViewSource},
Converter={StaticResource CategoriesToCategoriesConverter}}"
SelectedItem="{Binding Category,
Mode=TwoWay,
UpdateSourceTrigger=PropertyChanged,
Converter={StaticResource CategoryToCategoryConverter}}"
DisplayMemberPath="Name" SelectionChanged="categoryValues_SelectionChanged">
</ComboBox>
だから、各行が異なるモデルで、フィールドカテゴリにバインドされています。
<CollectionViewSource x:Key="categoryViewSource" d:DesignSource="{d:DesignInstance {x:Type Models:Category}, CreateList=True}"/>
マイカテゴリーモデルがPropertyChanged.Fody NuGetパッケージを使用してINotifyPropertyChangedの実装を次のようにcategoryViewSourceが定義されています。私は、Entity Frameworkのを使用してデータベースからデータをロードした後、私は次のように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;
だから、それが監視可能なコレクションにバインドされています。しかし、かつて私は、私のCollectionViewSourceは、論理思われる、(少なくともデバッガに)更新され
var c = new Category { Name="New Category" };
db.Categories.Add(c);
がそう、それはソースがあるのObservableCollectionです。しかし、私がしても
categoryViewSource.View.Refresh();
私のComboBox ItemsSourceは更新されません。私はIsSynchronizedWithCurrentItem="True"
とStackOverflowのどこかで見てみました。
categoryViewSource.Source = null;
categoryViewSource.Source = db.Categories.Local;
しかし、その後、私のSelectedItemプロパティは、すべてのコンボボックスにnullで、コレクションを再割り当て後に明らかにのSelectedItemのインスタンスが異なっているので、彼らはDataGrid内空表示されます。私はこのような何かを行う場合はこれまでのところそれだけで、動作します。
誰にも解決策がありますか?残念なことに、私はまだWPFの新機能ではありません。
私はそれを試してみましたし、それが動作しませんでした。 問題は、ObservableCollectionが更新されることです。私の 'db.Categories.Local'は' ObservableCollection 'で更新され、' CollectionViewSource.Source'は参考にすぎませんか?どのようにしても、 'db.Categories.Add(c)'の後にデバッグすると、私のcategoryViewSourceは 'View.InternalList'に新しい項目を表示します。 ItemsSourceのConverterにブレークポイントを設定して何かがあるかどうかを確認しますが、Converterは決して起動しません。なぜなら、何らかの理由でcategoryViewSourceへのバインディングが機能しないのですか? –
LeoReentry
db.CategoriesはObservableCollectionと同じコレクションではありません。 ComboBoxのItemsSourceプロパティをObservableCollectionに直接設定するとどうなりますか?categoryValues.ItemsSource = _cats; – mm8
これをItemsSourceとして直接追加しても問題ありません。しかし、別のBindingを使ってコレクションを追加すると、コレクションは機能しません。私はコンバータを介してコレクションを渡す必要があります。それを自動的に行う方法はありますか? – LeoReentry