2011-11-14 80 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

屬性必須是公共的,但對象本身可能不是。因此,作爲另一種可能的解決方案,您可以將此屬性封裝在另一個類中,使該類的實例在您的控件內部爲私有並綁定到它。