我正在使用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" />
答案 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绑定到代理。
查看链接,我几乎逐字复制了代码示例,它就像一个魅力。