访问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}},但它没有工作,或者我做错了吗?谢谢!
你可以试试:
<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:控件所在的命名空间)