总而言之,我需要知道在自定义用户控件中公开控件属性的正确方法。然后,当公开的属性更改时,使用基于更改的属性的自定义数据更新其他一些控件。
您正在描述dependency properties。您需要向自定义控件添加依赖属性,然后从控件内部和外部(在您的视图中)绑定到该属性。
第一部分取决于您使用的是UserControl 还是Control。假设它是一个控件,那么您将在 ControlTemplate 中使用TemplatedParent 绑定:
<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 代码 sn-p "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 绑定到新的依赖属性了:
<TextBox Text="{Binding ElementName=myCustomControl,Path=IsToggleChecked,Converter={StaticResource BoolToTextConverter}}" />
<local:MyCustomControl x:Name="myCustomControl" ... />
我假设您想要创建一个IValueConverter“BoolToTextConverter”,将布尔值转换为字符串“Checked”或“Unchecked”。