2010-12-12 6 views
2
<MenuItem Header="{Binding Hello, RelativeSource={RelativeSource FindAncestor, AncestorType={x:Type v:ProjectElementView}}}" /> 

v:ProjectElementViewはusercontrolのタイプです。usercontrolコードビハインド内のプロパティへのこの相対ソースバインディングが失敗しているのはなぜですか?

また、私はusercontrolに名前を付けて、ElementNameバインディングを使用してみました。

--Edit--

UserControl.xaml

<UserControl> 
<Grid>   
    <TabControl>    
     <TabControl.ContextMenu> 
      <ContextMenu> 
       <MenuItem Header="{Binding Path=Hello, RelativeSource={RelativeSource FindAncestor, AncestorType={x:Type v:ProjectElementView}}}" /> 
         </ContextMenu>   
     </TabControl.ContextMenu> 
</Grid> 

UserControl.xaml.cs

public partial class ProjectElementView : UserControl 
{ 
    private string _hello = "hello"; 

    public string Hello 
    { 
     get { return _hello; } 
     set { _hello = value; } 
    } 
} 
+0

ために、このリンクをチェックしてください。また、Visual Studioの出力ウィンドウにはバインドエラーがあります。あなたはそのテキストを提供できますか? –

答えて

2

カップルを使用して、非datacotextプロパティにアクセスできるようになるとは思わないですか

<UserControl> 
<Grid> 
    <TabControl > 
     <TabControl.ContextMenu> 
      <ContextMenu > 
       <MenuItem Header="{Binding Path=Hello}" /> 
      </ContextMenu> 
     </TabControl.ContextMenu> 
    </TabControl> 
</Grid> 

もう一度ポイントは、datacontextを設定せずにコードビハインドプロパティにアクセスすることはできません。私はプロパティをviewmodelクラスに移動し、そのクラスにバインドすることをお勧めします。

はちょうど私がユーザーコントロールの完全な宣言だけではなく、MenuItemの抜粋を参照すると便利かもと思うより

http://serialseb.blogspot.com/2007/10/wpf-tips-8-use-your-code-behind-for.html

+0

ありがとうございます。これは私が期待したほど単純ではないように見えます。 – Justin

1

あなたはこの

のように行うことができます
<TextBlock Text="{Binding RelativeSource={RelativeSource FindAncestor, 
        AncestorType={x:Type UserControl}}, Path=DataContext.Message}" /> 

EDITは

RelativeSourceプロパティは、光源として複数のチェックhereについて現在のオブジェクト に相対的に配置されているオブジェクトを指定するために使用されます。

ポイントは、私はあなたが

<UserControl x:Name="sample" > 
<Grid> 
    <TabControl DataContext="{Binding ElementName=sample}" > 
     <TabControl.ContextMenu> 
      <ContextMenu > 
       <MenuItem Header="{Binding Path=Hello}" /> 
      </ContextMenu> 
     </TabControl.ContextMenu> 
    </TabControl> 
</Grid> 

を動作しているようだなアプローチのRelativeSource

+0

まだ動作しません。私がバインドしたい小道具は、UserControlのdatacontextにありません。 – Justin

+0

同じことが、ElementNameを使ってバインディングを失敗させるのでしょうか?回避策はありますか? – Justin

関連する問題