绑定 DataGrid 列标题 [重复]
Posted
技术标签:
【中文标题】绑定 DataGrid 列标题 [重复]【英文标题】:Bind DataGrid Column Header [duplicate] 【发布时间】:2011-12-25 20:45:39 【问题描述】:可能重复:Wpf Toolkit. Bind DataGrid Column Header to DynamicResourceWPF Error: Cannot find govering FrameworkElement for target element
我正在使用 MVVM 模式创建一个 WPF 应用程序,因此在我的视图中,我试图将 DataGrid
列的列标题绑定到我的视图模型上的属性,这是 @ 视图的数据上下文987654324@在。
XAML:
<DataGrid Name="DailyData" AutoGenerateColumns="False" CanUserAddRows="False" CanUserDeleteRows="False" ItemsSource="Binding Path=DailyDataViewModels" HorizontalAlignment="Stretch">
<DataGrid.Columns>
<DataGridTextColumn Header="Binding InflowVolumeLabel" Binding="Binding InflowVolume"></DataGridTextColumn>
</DataGrid.Columns>
</DataGrid>
但是标题只是显示为空白并且似乎没有尝试绑定到指定的属性,您如何绑定DataGrid
列标题?
【问题讨论】:
@parapurarajkumar:BindingMarkupExtension
认为任何未键入的值都是Path
,所以是的,这是故意的,但它也是正确的。
【参考方案1】:
DataGrid.Columns
集合遇到了一个巧妙的问题,即它们不是同一可视树的成员,因此只有 Binding
属性似乎有效。
我发现唯一可行的方法是将附加属性添加到DataGrid
,这将在加载数据后应用标头。
public static readonly DependencyProperty ColumnHeadersProperty =
DependencyProperty.RegisterAttached(
"ColumnHeaders",
typeof(IDictionary<string, string>),
typeof(DataGrid),
new UIPropertyMetadata(
new Dictionary<string,string>(),
ColumnHeadersPropertyChanged));
public static IDictionary<string,string> GetColumnHeaders(DependencyObject obj)
return (IDictionary<string, string>)obj.GetValue(ColumnHeadersProperty);
public static void SetColumnHeaders(DependencyObject obj,
IDictionary<string, string> value)
obj.SetValue(ColumnHeadersProperty, value);
static void ColumnHeadersPropertyChanged(DependencyObject sender,
DependencyPropertyChangedEventArgs e)
var dataGrid = sender as DataGrid;
if (dataGrid != null && e.NewValue != null)
dataGrid.AutoGeneratingColumn += AddColumnHeaders;
static void AddColumnHeaders(object sender,
DataGridAutoGeneratingColumnEventArgs e)
var headers = GetColumnHeaders(sender as DataGrid);
if (headers.ContainsKey(e.PropertyName))
e.Column.Header = headers[e.PropertyName];
可能使用类似(可以改进):
// you could change it to use Column.DisplayIndex
this.dataGrid.SetValue(
DataGridEx.ColumnHeadersProperty,
new Dictionary<string, string>
"PropertyName1", "Header 1" ,
"PropertyName2", "Header 2" ,
"PropertyName3", "Header 3" ,
);
【讨论】:
以上是关于绑定 DataGrid 列标题 [重复]的主要内容,如果未能解决你的问题,请参考以下文章
在 Winforms 项目中使用 DataGrid 中的复选框列
wpf datagrid怎么得到第一项焦点?然后在方向键上下移动