将 DataGridColumnHeader 与所选行的 属性 绑定
Bind DataGridColumnHeader with selected row's property
考虑以下 ViewModel:
public class MyViewModel
{
public ObservableCollection<Foo> foos { get; set; }
}
[PropertyChanged.ImplementPropertyChanged]
public class Foo
{
public string Name { get; set; }
public string NameHeader { get; set; }
}
请注意,我正在使用 Fody's PropertyChanged 使我的 ViewModel 属性实现 INotifyPropertyChanged
。
我有以下 DataGrid
:
<DataGrid x:Name="FooTable"
ItemsSource="{Binding Path=foos}"
AutoGenerateColumns="False"
CanUserAddRows="True"
AutomationProperties.IsColumnHeader="True"
SelectionMode="Single"
SelectionUnit="FullRow">
<DataGrid.Columns>
<DataGridTextColumn
Binding="{Binding Name, Mode=TwoWay, UpdateSourceTrigger=PropertyChanged}"
Header="{Binding NameHeader, Mode=OneWay, UpdateSourceTrigger=PropertyChanged}"
Width="Auto" />
</DataGrid.Columns>
</DataGrid>
Header
与 NameHeader
的绑定无效!当然,然后我意识到不同的行将具有不同的 NameHeader
值。
所以我真正想要的是 将列的 Header
与所选行的 NameHeader
绑定。我怎样才能做到这一点?
使用 HeaderTemplate
和 TextBlock
绑定到 DataGrid
的 SelectedItem
属性:
<DataGridTextColumn Binding="{Binding Name}" Width="Auto">
<DataGridTextColumn.HeaderTemplate>
<DataTemplate>
<TextBlock Text="{Binding Path=SelectedItem.NameHeader, RelativeSource={RelativeSource AncestorType=DataGrid}}"/>
</DataTemplate>
</DataGridTextColumn.HeaderTemplate>
</DataGridTextColumn>
考虑以下 ViewModel:
public class MyViewModel
{
public ObservableCollection<Foo> foos { get; set; }
}
[PropertyChanged.ImplementPropertyChanged]
public class Foo
{
public string Name { get; set; }
public string NameHeader { get; set; }
}
请注意,我正在使用 Fody's PropertyChanged 使我的 ViewModel 属性实现 INotifyPropertyChanged
。
我有以下 DataGrid
:
<DataGrid x:Name="FooTable"
ItemsSource="{Binding Path=foos}"
AutoGenerateColumns="False"
CanUserAddRows="True"
AutomationProperties.IsColumnHeader="True"
SelectionMode="Single"
SelectionUnit="FullRow">
<DataGrid.Columns>
<DataGridTextColumn
Binding="{Binding Name, Mode=TwoWay, UpdateSourceTrigger=PropertyChanged}"
Header="{Binding NameHeader, Mode=OneWay, UpdateSourceTrigger=PropertyChanged}"
Width="Auto" />
</DataGrid.Columns>
</DataGrid>
Header
与 NameHeader
的绑定无效!当然,然后我意识到不同的行将具有不同的 NameHeader
值。
所以我真正想要的是 将列的 Header
与所选行的 NameHeader
绑定。我怎样才能做到这一点?
使用 HeaderTemplate
和 TextBlock
绑定到 DataGrid
的 SelectedItem
属性:
<DataGridTextColumn Binding="{Binding Name}" Width="Auto">
<DataGridTextColumn.HeaderTemplate>
<DataTemplate>
<TextBlock Text="{Binding Path=SelectedItem.NameHeader, RelativeSource={RelativeSource AncestorType=DataGrid}}"/>
</DataTemplate>
</DataGridTextColumn.HeaderTemplate>
</DataGridTextColumn>