1

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

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>

我想以a或绑定模式将SearchTextBoxText属性绑定到我的属性。SearchStringOneWayToSourceTwoWay

我试过了:

Text="{Binding RelativeSource={RelativeSource TemplatedParent}, Path=SearchString, Mode=OneWayToSource}"

什么都不做。

Text="{Binding RelativeSource={RelativeSource TemplatedParent}, Path=SearchString, Mode=TwoWay}"

Text="{TemplateBinding SearchString}"

当我以编程方式更改on更改时,它在一个方向上可以正常工作,但在另一个方向上SearchString则不行TextTextBox

我也尝试过制作SearchString一个常规属性并RelativeSource在各种Modes 中使用它来绑定它,但它没有用。

在常规的 View-to-ViewModel 绑定中,这是一件非常简单的事情,那么我在这里缺少什么?

4

1 回答 1

3

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

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

于 2013-10-21T07:25:40.727 回答