如果我创建一个绑定到DataGridTextColumn
的IsReadOnly
属性,它不会实现。如果我通过标记设置它,它会工作。
<DataGridTextColumn IsReadOnly="{Binding IsReferenceInactive}"/> <!-- NOP -->
<DataGridTextColumn IsReadOnly="True"/> <!-- Works as expected, cell is r/o -->
IsReferenceInactive
属性是一个DP,工作正常(出于测试目的,我将其绑定到一个复选框,该复选框工作正常)
这是否为已知限制?
更新
Uups,除了我写的,输出窗口中有一条消息:
系统.窗口.数据错误:2:找不到目标元素的管理FrameworkElement或FrameworkContentElement。绑定表达式:路径=IsReferenceInactive;数据项=空;目标元素为“DataGridTextColumn”(哈希代码=23836176);目的属性为'IsReadOnly'(型别为'Boolean')
7条答案
按热度按时间weylhg0b1#
与代码改善相同,但更简单:
nkkqxpd92#
DataGridColumn
不是可视树的一部分,也不参与这样的绑定。我解决这个问题的方法是使用DataGridTemplateColumn
。还有其他的变通方法,我发现它们有点太老套了,但是它们确实有效;即:http://blogs.msdn.com/b/jaimer/archive/2008/11/22/forwarding-the-datagrid-s-datacontext-to-its-columns.aspx
vdgimpew3#
我发现了这样一个解决方案,它允许您在DataContext未被继承时绑定到数据:http://www.thomaslevesque.com/2011/03/21/wpf-how-to-bind-to-data-when-the-datacontext-is-not-inherited/
添加托马斯编写的
BindingProxy
类,并将以下资源添加到您的DataGrid
:现在,您可以通过
BindingProxy
的Data
属性绑定到DataContex
,正如您所期望的那样。zzlelutf4#
DataGridTextColumn的系结只适用于Text属性,而不适用于DataGridTextColumn的其他属性。
**解决方案:**DataGridTextColumn通知DataGrid为每一行与该列创建一个TextBlock.您可以为TextBlock定义一个样式,并将该样式与该列得TextBlock得Style.Key(ElementStyle)链接.
当然,TextBlock现在需要从数据列表中找到对象。它可以使用AncestorType=DataGridRow的RelativeSource绑定来完成这一操作。然后DataGridRow提供对对象的访问。
大概是这样的:
很复杂吧?我建议您阅读我关于datagrid格式化的详细文章,网址是:http://www.codeproject.com/Articles/683429/Guide-to-WPF-DataGrid-formatting-using-bindings?msg=5037235#xx5037235xx
祝你好运,你需要它:-)
dojqjjoe5#
如果您喜欢@codekaizen的解决方案,但是它看起来像一个被禁用的TextBox,那么下面的代码就可以解决这个问题:
9rbhqvlz6#
我已经找到了一个很好的解决方案,通过使用MarkupExtension将DataGridColumns与绑定一起使用。这样就可以使用带有转换器的绑定:https://stackoverflow.com/a/27465022/9758687
im9ewurl7#
如果您已使用EditingElementStyle,且需要透过系结变更IsEnabled值: