总结一下,我需要知道正确的方法来暴露自定义用户控件中的控件的属性。然后,当暴露的属性更改基于更改的属性更新其他控件与自定义数据。
您正在描述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