2016-11-03 74 views
0

在WPF MVVM模式下工作,我有這樣的訪問userctrol的DataContext的不爲我

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

在我MainPageView一個用戶控件我使用這樣的

<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

你想訪問'Window'的屬性,但是在'FindAncestor'中使用'UserControl'類型...爲什麼? – Sinatr

+0

這一切都可以,因爲我的viewmodel在baseviewmodel中具有相同的屬性 –

+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。 (location:是你的控件所在的命名空間)

+0

感謝我試過這個,但沒有工作 –

+0

你應該在你的回答中解釋它爲什麼有效以及你解決了什麼問題,而不是發表一些沒有評論的代碼。 – dymanoid

相關問題