在WPF
问题描述:
更改数据网格列标题我有一个数据网格如下所示在WPF
<DataGrid x:Name="dataGrid" Margin="0,5,10,5" AutoGenerateColumns="False" ItemsSource="{Binding Products, Mode=TwoWay, UpdateSourceTrigger=PropertyChanged}" >
<DataGrid.Columns>
<DataGridTextColumn x:Name="productName" Binding="{Binding Path Name}" Header="Name To Change">
</DataGrid.Columns>
对于代码我使用的DataContextSpy
public class DataContextSpy : Freezable
{
public DataContextSpy()
{
// This binding allows the spy to inherit a DataContext.
BindingOperations.SetBinding(this, DataContextProperty, new Binding());
}
public object DataContext
{
get { return GetValue(DataContextProperty); }
set { SetValue(DataContextProperty, value); }
}
// Borrow the DataContext dependency property from FrameworkElement.
public static readonly DependencyProperty DataContextProperty = FrameworkElement
.DataContextProperty.AddOwner(typeof(DataContextSpy));
protected override Freezable CreateInstanceCore()
{
// We are required to override this abstract method.
throw new NotImplementedException();
}
}
然后我有MVVM视图模型与属性我想要将标头绑定为这样:
public class ViewModel: ViewModelBase{
string header1;
Public string Header1{
get{return header1;}
set{
Set(ref header1, value);
}
...........
My question is why is it not binding to the property? Anny suggestions?
答
如果Header1
在相同视图模型类中定义为在Products
属性,你可以使用一个HeaderTemplate
这样的:
<DataGridTextColumn x:Name="productName" Binding="{Binding Path=Name}">
<DataGridTextColumn.HeaderTemplate>
<DataTemplate>
<TextBlock Text="{Binding Path=DataContext.Header1, RelativeSource={RelativeSource AncestorType=DataGrid}}" />
</DataTemplate>
</DataGridTextColumn.HeaderTemplate>
</DataGridTextColumn>
我会记住这为答案,但我怎么能实现属性更改。我想在运行时更改列? – KMarto
这应该只是将Header1源属性设置为新值并引发PropertyChanged事件的问题。但如果您有其他问题,请提出一个新问题。 – mm8