在WPF DataGrid中绑定DataGridColumn的Visible属性

3
我无法将WPF datagridtextcolumn的Visible属性绑定到布尔值。
我的绑定表达式是,
{Binding Path=DataContext.IsThisColumnVisible, RelativeSource={RelativeSource Mode=FindAncestor, AncestorType=Window},Converter={StaticResource vc}}

我已经检查了转换器的工作情况(将bool转换为visibility枚举),并且在范围内。
如果我对列的标题使用相同的表达式,则标题会按预期显示“false”。
Visible是一个依赖属性,因此应该是可绑定的。
有人看到我做错了什么吗?或者有其他人能够绑定到可见属性吗?
问候,
马特
4个回答

8

我解决了这个问题。

DataGridColumn不是框架元素,因此FindAncestor调用失败(DataGridColumn不是可视树的一部分)。

必须将绑定表达式的源属性设置为静态资源,这样就可以正常工作了。


8
以下是使用StaticResource代理转发DataContext的示例:http://tomlev2.wordpress.com/2011/03/21/wpf-how-to-bind-to-data-when-the-datacontext-is-not-inherited/ - surfen
我正在使用MVVM,并且它与提供的链接一起很好地工作:http://www.thomaslevesque.com/2011/03/21/wpf-how-to-bind-to-data-when-the-datacontext-is-not-inherited/ - Pascalsz

1

2
是的。转发DataContext是正确的方法。类似但在我看来更简单的方法:http://tomlev2.wordpress.com/2011/03/21/wpf-how-to-bind-to-data-when-the-datacontext-is-not-inherited/ - surfen

1
很难从你的代码片段中判断问题所在。请查看Visual Studio的输出窗口(在调试下),通常会给你一些线索来解决问题。

0

如果您可以从代码绑定,您可以使用

BindingOperations.SetBinding(DatagridColumInstance,
                             DatagridColum.VisibilityProperty,
                             myNewBindDef);

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接