2

これは単純化されているのでお詫びします。質問が回答されたことはわかっていますが、30ページほどで、解決しようとしている煮詰められた問題をまだ見つけていません。

私はまだSLで十分に練習しておらず、画面内のプロパティにバインドし、テキストが変更されたときに更新するTextBoxを作成しようとする簡単なバージョンを試しています(プロパティの変更はテキストに伝播します)。いくつかの理由により、これはDependencyPropertiesを使用して、INotifyPropertyChangedやXAMLではなく分離コードで行う必要があります。

私の最近の試みは次のようになります。

    public partial class MainPage : UserControl
{
    static MainPage()
    {
        TargetTextProperty = DependencyProperty.Register("TargetText", typeof(string), typeof(MainPage), new PropertyMetadata(new PropertyChangedCallback(TextChanged)));
    }

    public readonly static DependencyProperty TargetTextProperty;

    public string TargetText
    {
        get { return (string)GetValue(TargetTextProperty); }
        set { SetValue(TargetTextProperty, value); }
    }

    public MainPage()
    {
        InitializeComponent();

        TargetText = "testing";
        textBox1.DataContext = TargetText;
        Binding ResetBinding = new Binding("TargetText");
        ResetBinding.Mode = BindingMode.TwoWay;
        ResetBinding.Source = TargetText;

        textBox1.SetBinding(TextBox.TextProperty, ResetBinding);
    }

    private static void TextChanged(DependencyObject sender, DependencyPropertyChangedEventArgs e)
    {
        MainPage pg = (MainPage)sender;
        pg.textBox1.Text = e.NewValue as string;
    }
}

誰かが私が行方不明になっているもの(痛々しいほど明白なこと?)を見ますか?

ありがとう、

ジョン

4

1 に答える 1

4

必要なバインディングを設定するには、次で十分です。

textBox1.SetBinding(TextBox.TextProperty, new Binding() { Path = "TargetText", Source = this });

コードの問題は、プロパティへのSourceバインドと両方を設定し、その結果、フレームワークがにバインドしようとすることです。これは明らかに間違っています。PathTargetTextTargetText.TargetText

于 2011-06-02T13:14:36.660 に答える