我有一个带依赖项属性的自定义控件,定义如下:
public class TemplatedTextBox : TextBox
{
public static readonly DependencyProperty SearchStringProperty =
DependencyProperty.Register("SearchString", typeof(string), typeof(TemplatedTextBox), new UIPropertyMetadata(string.Empty));
public string SearchString
{
get { return (string)GetValue(SearchStringProperty); }
set { SetValue(SearchStringProperty, value); }
}
}
我使用以下控件模板:
<WpfApp:TemplatedTextBox>
<WpfApp:TemplatedTextBox.Template>
<ControlTemplate TargetType="{x:Type WpfApp:TemplatedTextBox}">
<StackPanel Height="20" Orientation="Horizontal">
<TextBlock Text="Search String :"/>
<TextBox x:Name="SearchTextBox" Width="200" Text="NEED TO BE BINDED TO SearchString!"/>
</StackPanel>
</ControlTemplate>
</WpfApp:TemplatedTextBox.Template>
</WpfApp:TemplatedTextBox>
我想以SearchTextBox
或Text
绑定模式将SearchString
的{{1}}属性绑定到我的OneWayToSource
属性。
我试过了:
TwoWay
哪个什么都不做。
Text="{Binding RelativeSource={RelativeSource TemplatedParent}, Path=SearchString, Mode=OneWayToSource}"
和
Text="{Binding RelativeSource={RelativeSource TemplatedParent}, Path=SearchString, Mode=TwoWay}"
当我以编程方式更改Text="{TemplateBinding SearchString}"
SearchString
Text
更改时,哪个方向正常,但不是另一种方式
我还尝试将TextBox
作为常规属性,并使用SearchString
在各种RelativeSource
中绑定它,但它不起作用。
在常规的View-to-ViewModel绑定中,这是一个非常直接的事情,所以我在这里缺少什么?
答案 0 :(得分:3)
我刚尝试过,它按预期工作。 它可能是简单的,例如,输入字符后你没有离开文本框,所以绑定不会触发?
尝试添加UpdateSourceTrigger=PropertyChanged
,以触发对输入的每个字符的绑定。