要显示Telerik:RadGridView
上的项目,我通常会使用DataContext="{Binding [someViewModel]}"
和ItemSource="{Binding objectList, Mode=TwoWay}"
。
对于我的专栏,我将访问objectfield
。整体情况如下:
<telerik:RadGridView DataContext="{Binding [someViewModel]}"
ItemSource="{Binding objectList, Mode=TwoWay}">
<telerik:RadGridView.Columns>
<telerik:GridViewDataColumn>
<telerik:GridViewDataColumn.CellTemplate>
<DataTemplate>
<CheckBox IsEnabled="{Binding enabledVar}"
IsChecked="{Binding isChecked, Mode=Twoway}"
</DataTemplate>
</telerik:GridViewDataColumn.CellTemplate>
</telerik:GridViewDataColumn>
</telerik:RadGridView.Columns>
</telerik:RadGridView>
想象一下objectList
中会有10个项目。 objectList
中的每个项目都有一个变量isChecked
,可以操作复选框IsChecked
属性。
我在名为enabledVar
的同一个视图模型中有另一个变量来控制十个复选框IsEnabled
属性。 enabledVar
不是objectList
的一部分,但我无法获得价值。我可以知道如何处理这种情况吗?
更新
我找到了一些新的方向,但不确定它是否有帮助。
<CheckBox IsEnabled="{Binding enabledVar,
RelativeSource={RelativeSource Mode=FindAncestor,
AncestorType=telerik:RadGridView}}"
但当然,仍然失败了。
非常感谢任何帮助。
答案 0 :(得分:1)
如果使用Ancestor,则必须绑定到DataContext
<CheckBox IsEnabled="{Binding Path=DataContext.enabledVar,
RelativeSource={RelativeSource Mode=FindAncestor,
AncestorType=telerik:RadGridView}}"
另一种方法可能是使用元素绑定集名称
<telerik:RadGridView x:Name="myGrid" ...
然后在celltemplate中绑定它
<CheckBox IsEnabled="{Binding Path=DataContext.enabledVar, ElementName=myGrid}"
希望这有帮助。
答案 1 :(得分:0)
Update中建议的代码不起作用,因为GridViewDataColumn不是Visual树的一部分,因此无法访问DataContext。
您必须使用代理数据绑定,例如建议的here。您可以通过搜索“wpf proxy databinding”获得更多示例。