如何绑定列标题属性在ViewModel?(WPF MVVM)

本文关键字:ViewModel WPF MVVM 属性 何绑定 绑定 标题 | 更新日期: 2023-09-27 18:17:26

我有一个窗口,有绑定到ViewModel对象(VM1为例)的DataContext。VM1有很多属性,其中之一是一个名为"MyTitle"的字符串。

我有一个DataGridTextColumn在'Window'Grid'DataGrid'。我如何将DataGridTextColumn中的属性"Header"绑定到VM1 ViewModel中的属性"MyTitle"?

谢谢!

如何绑定列标题属性在ViewModel?(WPF MVVM)

不幸的是,DataGrid的列定义不继承DataContext,因为它们不是可视树的一部分,所以您不能直接绑定到ViewModel。您需要求助于本文中描述的解决方法:

<DataGrid.Resources>
    <local:BindingProxy x:Key="proxy" Data="{Binding}" />
</DataGrid.Resources>
...
<DataGridTextColumn Header="{Binding Data.MyTitle, Source={StaticResource proxy}}"/>

不需要像经常建议的那样使用绑定代理。显然,DataGridColumn.Header不是DependencyProperty。要仍然绑定它,只需使用XAML属性元素语法显式地定义Header,并绑定头内容:

<DataGrid>
  <DataGrid.Columns>
    <DataGridTextColumn>
      <DataGridTextColumn.Header>
        <TextBlock Text="{Binding RelativeSource={RelativeSource AncestorType=DataGrid}, Path=DataContext.TextValue}" />
      </DataGridTextColumn.Header>
    </DataGridTextColumn>
  </DataGrid.Columns>
</DataGrid>

接受的答案对我不起作用。

我能使这个工作。

<FrameworkElement x:Name="proxy" DataContext="{Binding}"/>
<DataGridTextColumn Header="{Binding Source={x:Reference proxy}, Path=DataContext.MyTitle}/>