2012-04-05 57 views
2

我正在使用WPF应用程序,在该应用程序中我使用telerik网格,并且我正在使用MVVM mpdel绑定yjay网格中的数据。我想禁用灰色该网格中的一个特定列基于我的布尔值。我设置的IsEnabled属性为假为GridViewDataColumn,但它不是会受到影响该列....在XAML的telerik网格中禁用特定列使用MVVM

请谁能告诉我这个问题的解决?

在此先感谢....

我禁用网格列代码:

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

都和你一样在这个例子中你使用一个明确的布尔值('的IsEnabled =“假”')或者是你想了'IsEnabled'绑定到您的视图模型的值? – 2012-04-05 05:39:27

+0

是的!确切地说...我用绑定一个显式值(IsEnabled =“{Binding MyBool}”)...因此,为了测试目的,我将默认值设置为IsEnabled =“False” - 这也不起作用:-( – SuryaKavitha 2012-04-05 05:46:02

回答

0

我被这只是昨天咬伤。我的问题是内置的WPF DataGrid,但我认为这是相同的根本原因。

基本问题是你的GridViewDataColumn是一个虚拟构造。它实际上并没有显示在屏幕上。显示的内容是数据 - 数据头的单元格,数据的单元格等等。这意味着GridViewDataColumn不是它所在窗口的可视化树的一部分,所以绑定到默认视图的DataContext失败。如果您查看Visual Studio的“输出”窗格,则会看到绑定错误。

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

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

+0

A CellStyleSelector也可以工作... – 2012-10-08 00:10:39

1

IsReadOnlyBinding应该做的伎俩。

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