我正在从WinForms转移到WPF并尝试为触摸屏应用程序实现MVVM模式。我在WPF控件库(dll)中创建了几个自定义控件,我可以将这些控件带入View中,没有任何问题。但是,我开始陷入纯粹的学术场景,我希望View中的TextBox能够显示我的自定义控件的ToggleButton.IsChecked属性为" Checked"和"未经检查"分别
总而言之,我需要知道公开自定义用户控件内控件属性的正确方法。然后,当公开的属性更改时,根据更改的属性更新一些其他控件和自定义数据。
答案 0 :(得分:1)
总而言之,我需要知道公开自定义用户控件内控件属性的正确方法。然后,当公开的属性更改时,根据更改的属性更新一些其他控件和自定义数据。
您正在描述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代码段&#34; propdp&#34;。看起来应该是这样的:
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
&#34; BoolToTextConverter&#34;将布尔值转换为字符串&#34; Checked&#34;或&#34;未经检查&#34;。