2016-11-03 7 views
0
funktioniert

In wpf mvvm Modus, ich habe ein Usercontrol wie dieseZugang userctrol Datacontext nicht für mich

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

In meinem MainPageView ich es wie folgt nun hier

<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> 

verwenden ist die Frage, wie Kann ich auf den DataContext.UserVisiable von MyUserControl zugreifen und an die DataGrid-Sichtbarkeit von MyUserControl binden? Ich habe versucht, {RelativeSource FindAncestor, AncestorType = {x: Type UserControl}} zu verwenden, aber es hat nicht funktioniert oder ich habe es falsch gemacht? Vielen Dank!

+0

Sie möchten auf die Eigenschaft von 'Window' zugreifen, aber' UserControl' in 'FindAncestor' eingeben ... warum? – Sinatr

+0

es ist alles in Ordnung, weil mein Viewmodel die gleiche Eigenschaft im baseviewmodel hat –

+0

Sie möchten auf DataContext.Visibility von MyUserControl zugreifen. Haben Sie Visibility-Eigenschaft auf MyControlViewModel? – Liero

Antwort

0

Sie können diese versuchen:

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

Erläuterung: Mit Relative für die Bindungsquelle, helfen Sie navigieren die visuelle Struktur werfen, auf die ersten Vorfahren der Stromregelung, des Typs angegeben (Usercontrol). Es verwendet dann das UserControl.DataContext.UserGrade als die Bindungseigenschaft.

Wenn UserControl.DataContext null ist, wird die Bindung nicht funktionieren. Wie in der Frage angegeben, hat userControl einen DataContext, der diese Eigenschaft enthält.

Sie könnten auch versuchen, die AncestorType=location:MyControl einzustellen, falls UserControl nicht genug ist. (location: ist der Namespace, in dem sich Ihr Steuerelement befindet)

+0

DANKE ich habe das versucht, aber nicht funktioniert –

+0

Anstatt nur etwas Code ohne Kommentare zu veröffentlichen, sollten Sie in Ihrer Antwort erklären, warum es funktioniert und welche Probleme Sie gelöst haben. – dymanoid