0

要显示项目,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>

想象一下将有 10 个项目objectList。中的每个项目objectList都有一个变量isChecked来操作复选框IsChecked属性。

我在同一个视图模型中有另一个变量,命名enabledVar为控制十个复选框IsEnabled属性。enabledVar不是其中的一部分,objectList但我无法获得价值。我可以知道如何处理这种情况吗?

更新:

我找到了一些新的方向,但不确定它是否有帮助。

<CheckBox IsEnabled="{Binding enabledVar,
     RelativeSource={RelativeSource Mode=FindAncestor, 
     AncestorType=telerik:RadGridView}}"

但当然,仍然失败。

任何帮助将不胜感激。

4

2 回答 2

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}"

希望这可以帮助。

于 2014-02-14T09:27:24.883 回答
0

更新中建议的代码将不起作用,因为 GridViewDataColumn 不是可视树的一部分,因此无法访问 DataContext。

您将不得不使用代理数据绑定,就像这里建议的那样。您可以通过搜索“wpf 代理数据绑定”获得更多示例。

于 2014-02-14T09:31:50.050 回答