2016-11-03 9 views
0

のために動作しません、私は私のMainPageViewでこのアクセスuserctrolのDataContextのは、WPFのMVVMモードでは、私

<UserControl MyControl> 
    <Grid> 
    <DataGrid 
     ItemsSource="{Binding MySource}"   
     Visibility = "{Binding the usercontrol's datacontext.UserGrade}" 
    /> 
    </Grid> 
</UserControl> 

のようなユーザーコントロールは、私はこの

<Window:MainPageView 
    xmlns:vm="clr-namespace:My.ViewModel" 
    xmlns:userCtl="clr-namespace:My.Controls" 
    <Window.DataContext> 
    <vm:MainPageViewModel/> 
    </Window.DataContext> 
    <userCtl:MyControl> 
    <userCtl:Mycontrol.DataContext> 
     <vm:MyControlViewModel/> 
    </userCtl:Mycontrol.DataContext> 
    <userCtl:MyControl> 
</Window:MainPageView> 

のようにそれを使用していさてここで問題は、どのようですMyUserControlのdatacontext.UserVisiableにアクセスし、MyUserControlのDataGridの可視性にバインドできますか? {RelativeSource FindAncestor、AncestorType = {x:Type UserControl}}を使用しようとしましたが、機能しませんでしたか、それとも間違っていましたか?ありがとう!

+0

'FindAncestor'に' UserControl'型を使用しています...なぜですか? – Sinatr

+0

私のviewmodelがbaseviewmodelで同じプロパティを持っているので、それはすべてOKです –

+0

MyUserControlのdatacontext.Visibilityにアクセスしたいと思います。 MyControlViewModelにVisibilityプロパティがありますか? – Liero

答えて

0

あなたはこれを試みることができる:

 <Grid> 
     <DataGrid ItemsSource="{Binding MySource}"  
        Visibility = "{Binding DataContext.UserGrade, RelativeSource={RelativeSource AncestorType=UserControl}}"/> 
    </Grid> 

説明:バインディングソースためRelativeSourceを使用して、あなたが指定したタイプ(ユーザーコントロール)の、電流制御の最初の祖先に、ビジュアルツリーを投げるナビゲートするのに役立ちます。次に、バインディングプロパティとしてUserControl.DataContext.UserGradeを使用します。

Usercontrol.DataContextがnullの場合、バインディングは機能しません。質問で指定されているように、userControlにはそのプロパティを含むDataContextがあります。

また、UserControlで十分でない場合に備えて、AncestorType=location:MyControlを設定してみることもできます。 (場所はコントロールが置かれている名前空間です)

+0

感謝していますが、これを試しましたがうまくいきませんでした。 –

+0

コメントなしでちょっとしたコードを投稿するのではなく、あなたが答えた理由を説明し、解決した問題を教えてください。 – dymanoid

関連する問題