使用MVVM在XAML中禁用telerik Grid中的特定列

时间:2012-04-05 05:24:49

标签: c# wpf xaml telerik

我正在使用WPF应用程序,在该应用程序中我正在使用telerik gird并且我正在使用MVVM mpdel来绑定yjay网格中的数据。我希望根据我的bool值禁用灰显该网格中的特定列。我将 IsEnabled 属性设置为该GridViewDataColumn的false,但它不会受到该列的影响....

请有人能告诉我这个问题的解决方案吗?

提前致谢....

我禁用网格列的代码是:

  <telerik:GridViewDataColumn Width="40" IsFilterable="False"  HeaderTextAlignment="Center" Header="Max" DataMemberBinding="{Binding Constraint.MaxCountConstraint, Mode=TwoWay}" IsEnabled="{Binding MyBoolValue}" Tag="Exclude" /> 

2 个答案:

答案 0 :(得分:1)

新的IsReadOnlyBinding应该可以解决问题。

<telerik:GridViewDataColumn Width="40" IsFilterable="False"  HeaderTextAlignment="Center" Header="Max" DataMemberBinding="{Binding Constraint.MaxCountConstraint, Mode=TwoWay}" IsReadOnlyBinding="{Binding MyBoolValue}" Tag="Exclude" />

答案 1 :(得分:0)

昨天我被这个咬了。我的问题在于内置的WPF DataGrid,但我认为这是根本原因。

基本问题是GridViewDataColumn是一个虚拟构造。它实际上并未显示在屏幕上。显示的是其中的数据 - 标题的单元格,数据的单元格等。这意味着GridViewDataColumn不是它所在窗口的可视树的一部分,因此绑定到默认视图的DataContext失败。如果查看Visual Studio的“输出”窗格,您将看到此绑定错误。

我在Thomas Levesque's blog中找到了解决方案,这有点像黑客,但它完美无缺。它涉及创建一个名为BindingProxy的小类,它继承了Freezable,这是一个允许数据上下文冒险超出可视层次结构的WPF基类。在视图中创建BindingProxy作为StaticResource并将其绑定到datacontext,然后将GridViewDataColumn绑定到代理。

查看链接,我几乎逐字复制了代码示例,它就像一个魅力。