我有一个WPF应用程序。它有一个分为4行的网格。在第2行中,我有一个datagrid,其datacontext设置为OrderBlock的对象。一切正常。但是,我希望datagrid的列标题文本值之一绑定到视图模型中的属性。
以下是我尝试失败的示例。
<DataGridTextColumn Header="{Binding RelativeSource={RelativeSource
AncestorType={x:Type Window}}, Path=ColumnHeadInfo}"
Binding="{Binding RejectReason}" IsReadOnly="True"/>
答案 0 :(得分:8)
Window
没有名为ColumnHeadInfo
的属性,但我认为您的ViewModel是您的Window DataContext
,这可能有此属性?!
如果是这样,请改为尝试:
Path=DataContext.ColumnHeadInfo
修改强>
因为单凭这并没有解决你的问题:原因可能是DataGridColumn
不是可视树的一部分,因此找不到任何父元素,因为它没有任何元素。因此,RelativeSource AncestorType
绑定不会产生任何结果。这应该在输出窗口中显示警告。可能this link可能对您有帮助。
答案 1 :(得分:2)
而不是控件我使用“标记接口”来找到正确的datacontext。
“marker interfaces”只是空接口:
public interface IDataContextColumnHeadInfoMarker{}
我知道的视图有正确的datacontext标有接口
public partial class MyViewWiththeDatagrid : UserControl, IDataContextMarkerLadeSolldatenCommand
现在我可以使用带有relativesource绑定的接口而不是控件或者ancestorlevel,这使得某些情况更容易:)
<DataGridTextColumn Header="{Binding RelativeSource={RelativeSource AncestorType={x:Type local:IDataContextColumnHeadInfoMarker}}, Path=DataContext.ColumnHeadInfo}"