總結一下,我需要知道正確的方法來暴露自定義用戶控件中的控件的屬性。然後,當暴露的屬性更改基於更改的屬性更新其他控件與自定義數據。
您正在描述dependency properties。您需要爲您的自定義控件添加一個依賴項屬性,然後從控件內部和從外部(在您的視圖中)綁定該屬性。
第一部分將取決於您是否使用UserControl
或Control
。比方說,它是一個控制,那麼你可以使用一個TemplatedParent
在您的ControlTemplate結合:
<ToggleButton IsChecked="{Binding RelativeSource={RelativeSource TemplatedParent},Path=IsToggleChecked,Mode=TwoWay}" ... />
如果在另一方面,它是一個UserControl
,那麼方法是相似的,但你需要確保數據上下文是對的。一種方法是使用一個FindAncestor
結合:
<ToggleButton IsChecked="{Binding RelativeSource={RelativeSource AncestorType=UserControl},Path=IsToggleChecked,Mode=TwoWay}" ... />
現在,添加依賴屬性,嘗試在Visual Studio代碼片段「propdp」。它應該是這個樣子:
public bool IsToggleChecked
{
get { return (bool)GetValue(IsToggleCheckedProperty); }
set { SetValue(IsToggleCheckedProperty, value); }
}
public static readonly DependencyProperty IsToggleCheckedProperty =
DependencyProperty.Register("IsToggleChecked", typeof(bool), typeof(MyCustomControl), new PropertyMetadata(false));
現在終於可以將文本框綁定到新的依賴項屬性:
<TextBox Text="{Binding ElementName=myCustomControl,Path=IsToggleChecked,Converter={StaticResource BoolToTextConverter}}" />
<local:MyCustomControl x:Name="myCustomControl" ... />
我以爲你會想打一個IValueConverter
,其將「BoolToTextConverter」字符串「Checked」或「Unchecked」的布爾值。
需要說明的是,您的ToggleButton是「自定義控件」還是「用戶控件」?自定義控件通常會繼承自Control或現有的控件,如Button;而用戶控件將從UserControl繼承。 – olitee 2014-12-10 21:50:52