在自定义控件上进行OneWayToSource / TwoWay绑定

时间:2013-10-21 06:50:31

标签: c# wpf data-binding custom-controls

我有一个带依赖项属性的自定义控件,定义如下:

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>

我想以SearchTextBoxText绑定模式将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绑定中,这是一个非常直接的事情,所以我在这里缺少什么?

1 个答案:

答案 0 :(得分:3)

我刚尝试过,它按预期工作。 它可能是简单的,例如,输入字符后你没有离开文本框,所以绑定不会触发?

尝试添加UpdateSourceTrigger=PropertyChanged,以触发对输入的每个字符的绑定。