2011-08-09 2 views
1

カスタムコントロールを作成しようとしています。このコントロールには、ObservableCollectionにバインドできるリストボックスやツリービューのように機能するバインディングと、必要に応じて追加および削除されるアイテムが必要です。ただし、コレクションに追加されたアイテムはUIに直接表示されません。それらは処理され、必要に応じてコントロールに追加されます。たとえば、ファイルへのフルパスを表す文字列が渡された場合、各ディレクトリが新しいノードであるTreeViewに追加されます。ItemsControlやその他の戦術をサブクラス化していますか?

私はItemsControlのサブクラスとしてカスタムコントロールを作成しようとしていますが、バインディングは機能しますが、アイテムがコントロールに追加された時点を知ることができないため、また、ObservableCollection型のDependencyPropertyをコントロールに追加し、次にこれらの命令に従ってバインドすることを検討しました。http://msdn.microsoft.com/en-us/library/aa970563.aspxしかし、そのように設定してもDependencyPropertyにバインドすることはできません。

この時点で、最初の段落の結果を得ることができるのであれば、私がそこに到達するためにどのような方法を使用しても構いません。誰かがこれで私を助けてくれますか?

答えて

0

コントロール内でOnItemsChangedをオーバーライドすると、アイテムが追加または削除されるたびに、ItemsSourceにバインドされたObservableCollection(Itemsプロパティの作成中)のコードを実行できます。この方法のパラメータは、OCのイベントに直接接続した場合と同じです。NotifyCollectionChangedEventArgs

これを行うと、考えていた新しいOCプロパティと同じ操作を行うことができますが、組み込みのItemsSourceプロパティを引き続き使用してコントロールをコントロールにバインドします。

+0

ご返信ありがとうございます。それはまさに私が探していたものではありませんでしたが、私が必要とされた場所に私をもたらしました。どうやら、私はデバッグを通して見たことから、OnItemsChangedイベントは、コントロールが最初に作成されたときにだけ発生しています。ただし、OnItemsSource changedイベントは、バインドされたコレクションに項目が追加されるたびに発生します。 –

関連する問題