DataContext越级绑定的问题

HymanLiuTS 2017-04-06 04:51:21
目前的界面结构如下:

<UserControl DataContext="{Binding viewmodel1}">
<Grid DataContext="{Binding datatable1}">
......
<textbox Text={Binding col1}></textbox>
<Button Command="{Binding ModifyCommand}"/>
</Grid>
</UserControl>


Button的Command绑定了viewmodel1(一个类)里面的ModifyCommand属性,而textbox 的Text绑定了datatable1(一个DataTable)的col1列。设置Grid 的DataContext为datatable1,设置UserControl 的DataContext为viewmodel1。

现在的问题是设置Grid的DataContext后,貌似Button找不到ModifyCommand了,该怎么解决????
...全文
186 3 打赏 收藏 转发到动态 举报
写回复
用AI写文章
3 条回复
切换为时间正序
请发表友善的回复…
发表回复
Mooyi_水 2017-04-07
  • 打赏
  • 举报
回复
这是个binding关系的问题,Button的上级结构是Grid 当它找Binding的时候先找自身绑定的数据里面有没有 ModifyCommand,没有就找Button的DataContext中有没有ModifyCommand,没有就像上级Grid里面找,然后找到Grid的DataContext中发现还是没有ModifyCommand,如果你这个Grid的DataContext没有显式binding的时候它还能向上一级找,但是如果你显示的binding了那么最后只能找到这一级了,所以你可以通过 Command=“{Binding DataContext.ModifyCommand,RelativeSource={RelativeSource AncestorType=UserControl AncestorLevel=2}}”的方式来binding 也可以直接给UserControl 个名字 然后用binding元素来实现
  • 打赏
  • 举报
回复
类似: Command=“{Binding DataContext.ModifyCommand,RelativeSource={RelativeSource AncestorType=UserControl}}”
  • 打赏
  • 举报
回复
你试试设置Binding的RelativeSource属性。 默认情况下,如果已设置了 DataContext 属性,则绑定会继承该属性所指定的数据上下文。但是,RelativeSource 属性是一种可以显式设置 Binding 的源和重写继承的数据上下文的方式。 感觉设置Binding 的 ElementName也可以,因为你就是需要去找到绑定源,但是 ElementName我没试过。

8,757

社区成员

发帖
与我相关
我的任务
社区描述
WPF/Silverlight相关讨论
社区管理员
  • WPF/Silverlight社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧