4

Windows ストア アプリでは、分離コードとレイアウト XAML をカプセル化して再利用するユーザー コントロールを作成します。シンプルなユーザー コントロールは次のようになります。

<UserControl>
    <StackPanel>
        <TextBlock Text="First Name" />
        <TextBox x:Name="MyTextBox" />
    </StackPanel>
</UserControl>

次に、バインディングをセットアップします。そこで、UI コントロールの Text プロパティを公開するプロパティを使用してコード ビハインドを作成します。このようなもの:

public string TextBoxText
{
    get { return MyTextBoxText.Text; }
    set { MyTextBoxText.Text = value; }
}

ただし、これは機能しません。ユーザー コントロールへのデータ バインディングは、XAML UI の重要な部分のようです。しかし、それはどのように達成されますか?

4

2 に答える 2

10

消費ページでのバインドをサポートするユーザー コントロールのプロパティの実装は 1 つだけです。それが依存プロパティです。実装は非常に単純ですが、依存関係プロパティはコントロールの静的プロパティであるため、UI と直接やり取りするには、変更されたイベントも含める必要があります。このような:

public string TextBoxText
{
    get { return (string)GetValue(TextBoxTextProperty); }
    set { SetValue(TextBoxTextProperty, value); }
}

public static readonly DependencyProperty TextBoxTextProperty =
    DependencyProperty.Register("TextBoxText", typeof(string), typeof(MyUserControl),
    new PropertyMetadata(string.Empty, OnTextBoxTextPropertyChanged));

private static void OnTextBoxTextPropertyChanged(DependencyObject d, DependencyPropertyChangedEventArgs e)
{
    (d as MyUserControl).MyTextBox.Text = e.NewValue.ToString();
}

私は認めますが、これは非常に明白ではありません。しかし、うまくいけば、あなたが知っているので、検索して理解しようとする時間を節約できます. ここでも、ユーザー コントロールの依存関係プロパティにのみバインドできます。また、変更されたイベントを使用して静的スレッドから UI 値を設定することしかできません。

頑張ってください!

于 2013-05-15T19:52:33.200 に答える
0

あなたは常にバインディングについて話しますが、実際には textbox.textproperty をプロパティにバインドしません (設定します)。

バインディングを使用する場合は、依存関係プロパティを作成し、テキスト ボックスのテキスト プロパティを次のようにバインドします。

<TextBox x:Name="MyTextBox" **Text="{Binding TextBoxText, Mode=TwoWay}"** />

usercontrols DataContext プロパティを usercontrol-instance に設定することを忘れないでください。

public MyUserControl1()
{
  this.InitializeComponent();

  // Set the datacontext to the usercontrol-instance.
  // If you don't, the binding will use the usercontrol's parent-datacontext.
  this.DataContext = this;
}
于 2013-05-16T06:09:36.740 に答える