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>

またはバインド モードでSearchTextBoxTextプロパティを自分のSearchStringプロパティにバインドします。OneWayToSourceTwoWay

私はもう試した:

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

これは何もしません。

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

Text="{TemplateBinding SearchString}"

プログラムでオンの変更を変更SearchStringすると、一方向ではうまく機能しますが、他の方法では機能しませんTextTextBox

SearchStringまた、通常のプロパティを作成してRelativeSource、あらゆる種類のModesで使用してバインドしようとしましたが、うまくいきませんでした。

これは、通常の View から ViewModel へのバインディングで行うのは非常に簡単なことですが、ここで何が欠けているのでしょうか?

4

1 に答える 1