如何绑定列标题属性在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"?
谢谢!
不幸的是,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}/>