【问题标题】:Disable Specific Column in telerik Grid in XAML Using MVVM使用 MVVM 在 XAML 中禁用 Telik 网格中的特定列
【发布时间】:2012-04-18 20:47:55
【问题描述】:

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

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

在此先感谢....

我禁用网格列的代码是:

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

【问题讨论】:

  • 您是否像示例中那样使用显式 bool 值 (IsEnabled="False") 还是尝试将 IsEnabled 绑定到视图模型中的值?
  • 是的!完全正确...我使用了绑定一个显式值,例如( IsEnabled="{Binding MyBool}" )...所以出于测试目的,我将默认值设置为 IsEnabled="False" - 这也不起作用:-(跨度>

标签: c# wpf xaml telerik


【解决方案1】:

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

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

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

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

【讨论】:

    【解决方案2】:

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

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-12-09
      • 1970-01-01
      • 2014-03-28
      • 1970-01-01
      • 2012-05-16
      相关资源
      最近更新 更多