访问usercontrol 's数据上下文不适合我

本文关键字:数据 上下文 不适合 usercontrol 访问 | 更新日期: 2023-09-27 18:16:03

在wpf mvvm模式下,我有一个这样的用户控件

<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的数据上下文。uservisible,并绑定到MyUserControl的数据网格可见性?我试图使用{RelativeSource FindAncestor,祖宗类型={x:类型UserControl}},但它没有工作,或者我做错了吗?谢谢!

访问usercontrol 's数据上下文不适合我

你可以试试:

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

说明:使用RelativeSource作为绑定源,可以帮助您将可视树导航到指定类型(UserControl)的当前控件的第一个祖先。然后它使用UserControl.DataContext.UserGrade作为绑定属性。

如果Usercontrol。DataContext为空,那么绑定将不起作用。如问题所述,userControl有一个包含该属性的DataContext。

此外,您可以尝试设置AncestorType=location:MyControl,以防UserControl不够。(location:控件所在的命名空间)