2011-11-14 12 views
1

私はカスタムWPFコントロール( "マルチセレクタ")を開発しています。私は、結合の目的のために、私のユーザーにItemsSource財産を与えるが、内部的に私はこのようなItemWrappersコレクションを使用しています:複雑なカスタムコントロールとプロパティの可視性

<UserControl x:Class="TFSControls.MultiSelectorControl.MultiSelectorControl"> 
    <ItemsControl Name="ItemsPresenter" ItemsSource="{Binding ItemWrappers}"> 
     ... 
    </ItemsControl> 
</UserControl> 

問題がItemWrappersプロパティを動作するように結合、このためには、パブリックでなければならないことです。 コントロールが自分のアセンブリに座っているので、私は内部に満足しています。

これを達成する最も簡単な方法は何ですか?

私の知っている唯一の解決策は、私のアセンブリでItemsControlをサブクラス化することですが、それは正しいとは思わない - 私はカスタム動作を必要とせず、このプロパティを内部/保護したい。

+0

あなたが言っているのは、いくつかのコレクションプロパティをパブリックではあるが、 'ItemWrappers'ではなくユーザコントロールから公開したいということです。正しい? –

+0

私はItemWrappersを内部にし、ItemsControlを使用している私のコントロールの内側にバインドすることができます。他のプロパティ(ItemsSource)はここでは重要ではありませんが、私はユーザーにバインドするための他のパブリックプロパティを持っていると言われています。 つまり、コントロールは次のように使用する必要があります。 '' – kubal5003

+0

その場合、あなたの 'ItemsWrapper'プロパティをプライベート依存プロパティKey(つまり、読み取り専用として登録されている依存関係プロパティ)とします。 –

答えて

0

ItemWrappersに読み取り専用の依存関係プロパティを設定できます。

+1

これは正しい方向への一歩ですが、最終的にはItemWrapperクラスも内部的にしたいと思います。誰もコントロール内での処理の方法を知る必要はありません。 – kubal5003

0

プロパティはpublicである必要がありますが、オブジェクト自体は公開されていない可能性があります。したがって、別の可能なソリューションとして、このプロパティを別のクラスにカプセル化し、そのクラスのインスタンスをコントロール内でプライベートにしてバインドします。

関連する問題