0
私はcustomsboxのitemsourceがviewmodelのobservablecollectionにバインドされています。 customListboxにSelectedItemsList DependencyPropertyを作成して、ユーザーがアイテムを選択できるようにし、viewmodelが更新されるようにしました。これは完全に機能します。リストボックスから選択されたアイテムのバインディングの更新
viewmodelのバインドされたリストを変更すると、customListbox内の選択した項目を更新することもできます。
static FrameworkPropertyMetadata fpm = new FrameworkPropertyMetadata(
new ObservableCollection<MyItem>(),
(FrameworkPropertyMetadataOptions.AffectsRender |
FrameworkPropertyMetadataOptions.BindsTwoWayByDefault),
new PropertyChangedCallback(OnSelectedItemsChanged)
);
private static void OnSelectedItemsChanged(DependencyObject d, DependencyPropertyChangedEventArgs e)
{
//the code
}
public static readonly DependencyProperty SelectedItemsListProperty =
DependencyProperty.Register("SelectedItemsList",
typeof(ObservableCollection<MyItem>),
typeof(CustomListBox), fpm);
SelectedItemsは読み取り専用です。 ViewModelから選択した項目を更新する方法はありますか?より適しているリストボックスの代わりがありますか?
SelectedItemsListプロパティのPropertyChangedCallbackで、割り当てられたコレクションがINotifyCollectionChangedを実装しているかどうかを確認します(例: ObservableCollectionでは)、CollectionChangedハンドラをアタッチします。そのハンドラで、SelectedItemsコレクションにアイテムを追加または削除します。 「SelectedItemsをバインドする」のStackOverflowを検索します。この問題には既に他の質問と回答があります。 – Clemens
propertyChangedCallbackは、ウィンドウの初期化でのみ呼び出されるようです。 dependency.registerの呼び出しが適切であることを確認するコードをいくつか投稿します。 – kurgaan
シュート。私はそれを考え出した。私は間違った観察可能なコレクションに縛られていた。 – kurgaan