0

シンプルなカスタム ユーザー コントロールがあります。

<Grid x:Name="LayoutRoot">
    <StackPanel>
        <TextBlock Text="{Binding DisplayText}"/>
        <TextBlock Text="{Binding PersonName}"/>
    </StackPanel>
</Grid>

MainPage.xaml で次のように使用します。

<local:WindowsPhoneControl1 x:Name="customControl" DisplayText="test">

</local:WindowsPhoneControl1>

MainPage.xaml.cs の場合:

PersonName = "George";
customControl.DataContext = this;

次に、Georgeが表示されますが、testは表示されません。これは理にかなっていますが、DisplayText プロパティにバインドする方法がわかりません。

もちろん、Georgeが表示されないため、以下は機能しません。

customControl.DataContext = customControl;

これは WP/silverlight 開発では機能するはずなので、AncestorType などは利用できない可能性があることに注意してください (必ずしも有用であるとは限りません)。

4

1 に答える 1

1

これを行うには、おそらく複数の方法があります。1 つ: 依存関係プロパティをユーザー コントロールに追加しPersonName、通常のプロパティを追加しますDisplayText(バインドしていないため、DP は必要ありません)。

public static readonly DependencyProperty = 
    DependencyProperty.Register("PersonName", typeof(string), typeof(MyUserControl), null);

public string DisplayText { get; set; }
public string PersonName
{
    get { return (string)GetValue(PersonNameProperty); }
    set { SetValue(PersonNameProperty, value); }
}

次に、ユーザー コントロールDataContextLayoutRoot(コンストラクターで初期化した後) に設定します。

public MyUserControl()
{
    InitializeComponent();
    LayoutRoot.DataContext = this;
}

編集次の方法の方が簡単かもしれません (間違いなく直接的です) が、Silverlight 5 が必要DisplayTextですRelativeSource

 <TextBlock Text="{Binding RelativeSource={RelativeSource AncestorType=UserControl},
                              Path=DisplayText}"/>

したがって、ここでもユーザー コントロールの DataContext を に設定できMainPage、この 1 つの要素のデータ ソースはユーザー コントロールのコード ビハインド クラスを指すことができます。

于 2012-11-15T06:58:29.770 に答える