23

Xaml でいくつかの異なるプロパティをバインドしようとしています。

<Label Content="{Binding Description}" 
Visibility="{Binding Path=DescriptionVisibility, 
ElementName=_UserInputOutput}"               
FontSize="{Binding Path=FontSizeValue, ElementName=_UserInputOutput}"  
HorizontalAlignment="Left" VerticalAlignment="Top" Padding="0" />

ここでは 2 つの異なるバインディング手法を使用していることに気付くでしょう。Element Name を使用するものは機能しますが、他のものは機能しません。コードビハインドは次のとおりです。

public string Description
{
     get { return (string)GetValue(DescriptionProperty); }
     set { SetValue(DescriptionProperty, value); }
}
public static readonly DependencyProperty DescriptionProperty = 
DependencyProperty.Register("Description", typeof(string), typeof(UserControl), 
new UIPropertyMetadata(""));

各バインディングには異なる名前が付いていますが、ほとんどの場合、すべてこのように見えます。Binding を次のように操作できるようにしたい:

{Binding Description}

それ以外の:

{Binding Path=Description, ElementName=_UserInputOutput}

ElementName が使用されている場合にのみ機能しているようです。この XAML をエクスポート/インポートする必要があるため、ElementName を取得できないか、インポートが機能しません。

私はこれが最善だと思いました:

{Binding Path=Description, RelativeSource={RelativeSource Self}}

これはうまくいきませんでした。

何か案は??ありがとうございました!

4

2 に答える 2

38

{RelativeSource Self}バインドされているプロパティを所有するオブジェクトをターゲットにします。そのようなバインディングがあるLabel場合は、そこにない を探しますLabel.Description。代わりに を使用する必要があります{RelativeSource AncestorType=UserControl}

ソースのないバインディング ( ElementNameSourceRelativeSource) は に対して相対的ですがDataContext、を外部バインディングと混同しないように設定するUserControlsことは避けてください。DataContext

于 2012-08-16T22:57:21.357 に答える
32

RelativeSource が相対的なものを決定するために使用しているものである DataContext を設定していません。UserControl のように、DataContext をより高いレベルで設定する必要があります。私は通常持っています:

<UserControl ... DataContext="{Binding RelativeSource={RelativeSource Self}}">
</UserControl>

これにより、コードビハインドで UserControl 自体にクラスをバインドするように指示されます。

于 2012-08-16T21:09:16.583 に答える