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>
に変更された場合に動作します。
私は正しく何をしているのか理解できません!
しかし、コントロールのリストにメンバーを追加/削除するときにOneWay Bindingがソースを更新しますか? – Jags
@James:はい。 SelectedItemsに割り当てられた実装IListは、ソースによって保持されている既存のリストになります。実際、SelectedItemsにバインドするソースのプロパティはReadOnlyになる可能性があります。ソースはリストのインスタンスを内部的に作成し、それをそのreadonlyプロパティに公開します。コントロールによって行われたそのリストへの変更は、ソースによって保持されているリストに直接行われます。 – AnthonyWJones
はい.. ItemsSourceプロパティからSelectedItemsに直接メンバーを追加することは素晴らしいです。変更はソースに反映されます:)私が疑うことは、 "ソースはリストのインスタンスを内部的に作成します"(userソースのバインドされたリストがnullであってはならないことを確認する必要があります)。次に、ListBoxのSelectedItemsプロパティ(multiSelectionモード用)はどのように機能しますか?私はそれがユーザーがプロパティのインスタンスを作成する必要があるとは思わない? [Plz、私が間違っているのか、意味が分からないのか教えてください] – Jags