【发布时间】:2019-10-26 08:17:59
【问题描述】:
我有一个带有 Text 属性的自定义控件,它应该双向绑定到数据上下文的属性。
绑定只发生在开头(我猜是一次),但不响应任何文本更改。
我的自定义控件:
public sealed class MyTextControl : Control
{
public static readonly DependencyProperty TextProperty = DependencyProperty.Register(
"Text", typeof(string), typeof(MyTextControl), new PropertyMetadata(default(string)));
public string Text
{
get => (string)GetValue(TextProperty);
set => SetValue(TextProperty, value);
}
public MyTextControl()
{
DefaultStyleKey = typeof(MyTextControl);
}
}
控制模板:
<Style TargetType="local:MyTextControl">
<Setter Property="Template">
<Setter.Value>
<ControlTemplate TargetType="local:MyTextControl">
<Border
Background="{TemplateBinding Background}"
BorderBrush="{TemplateBinding BorderBrush}"
BorderThickness="{TemplateBinding BorderThickness}">
<TextBox
BorderBrush="Black"
BorderThickness="1"
Text="{Binding Text, RelativeSource={RelativeSource TemplatedParent}}" />
</Border>
</ControlTemplate>
</Setter.Value>
</Setter>
</Style>
我正在调用控件:
<StackPanel HorizontalAlignment="Center" VerticalAlignment="Center">
<myTextControl:MyTextControl
Width="500"
HorizontalAlignment="Center"
VerticalAlignment="Center"
Text="{x:Bind Greeting, Mode=TwoWay}" />
<Button
Margin="50"
HorizontalAlignment="Center"
VerticalAlignment="Center"
Content="Submit" />
</StackPanel>
Greeting 是 DP 后面的代码设置为 Hello World!
我希望在问候语或文本更改文本中达到一个断点,但我没有。
似乎双向绑定效果不佳。
与 WPF 有什么不同?我怎样才能让它工作?
【问题讨论】:
-
naa 这不是问题。因为在 LostFocus (默认)上它也不起作用。只是为了练习,我已将此添加到模板中的 TextBox 中,但仍然没有达到断点。
-
不,它不是重复的。绑定双向绑定不仅必须在控件本身上指定,还必须在控件模板内部指定。您指定的问题是一个简单的绑定场景,根本没有自定义控件
-
问题还是一样。默认情况下没有双向绑定。
-
同样的问题可能会以不同的方式出现。这不是在控件内绑定而是在控件模板内绑定的场景。争论这个事实很糟糕
标签: wpf uwp binding win-universal-app custom-controls