2

Well..itsはユーザーがList型のプロパティを作成した場合にのみ機能します。Silverlight:DependencyProperty(IList)の双方向バインディングが機能していない

完全なシナリオを示します。

テンプレートコントロール(チェックボックス付きのマルチセレクトコンボボックス) ユーザーはList/ObservableCollectionをItemsSourceとして指定します。コレクションは、任意のタイプ(従業員、椅子、人など)にすることができます。 ItemsSourceのDependencyPropertyは、タイプIListです。 (彼はチェックして、いくつかの項目を表示して確認します項目を取り戻すことができるように)

ユーザーも2-wayがしたDependencyPropertyに結合してリストを与えることができ、問題がselectedItemsのである今

selectedItemsのと呼ばれますdp。テンプレート化されたコントロールではIList型です。 ユーザーがバインドしている場合、双方向バインディングは機能しません(例:List<Person>)。 List<Person>List<object>に変更された場合に動作します。

私は正しく何をしているのか理解できません!

答えて

1

SelectedItemsプロパティにTwoWayバインディングを配置することは意味がありません。これは、コントロールが、IListを実装しているオブジェクトのインスタンスを作成し、ソースオブジェクトのプロパティに割り当てる必要があることを意味します。しかし、プロパティに割り当てる実際のタイプをコントロールが知る方法はありません。

代わりに、元のオブジェクトにあらかじめ存在する空のリストでも、リストにOneWayバインドを使用する必要があります。コントロールタスクは、そのリストのメンバをItemsSourceプロパティで指定されたリストから単純に追加または削除することです。

+0

しかし、コントロールのリストにメンバーを追加/削除するときにOneWay Bindingがソースを更新しますか? – Jags

+0

@James:はい。 SelectedItemsに割り当てられた実装IListは、ソースによって保持されている既存のリストになります。実際、SelectedItemsにバインドするソースのプロパティはReadOnlyになる可能性があります。ソースはリストのインスタンスを内部的に作成し、それをそのreadonlyプロパティに公開します。コントロールによって行われたそのリストへの変更は、ソースによって保持されているリストに直接行われます。 – AnthonyWJones

+0

はい.. ItemsSourceプロパティからSelectedItemsに直接メンバーを追加することは素晴らしいです。変更はソースに反映されます:)私が疑うことは、 "ソースはリストのインスタンスを内部的に作成します"(userソースのバインドされたリストがnullであってはならないことを確認する必要があります)。次に、ListBoxのSelectedItemsプロパティ(multiSelectionモード用)はどのように機能しますか?私はそれがユーザーがプロパティのインスタンスを作成する必要があるとは思わない? [Plz、私が間違っているのか、意味が分からないのか教えてください] – Jags

関連する問題