2017-02-22 72 views
3

考虑以下视图模型:绑定DataGridColumnHeader与选定行的财产

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> 

NameHeader绑定的Header都不行!当然,我意识到不同的行将有不同的值NameHeader

所以我真正想要的是绑定列的Header与选定行的NameHeader。我怎样才能做到这一点?

回答

1

使用HeaderTemplateTextBlock结合到DataGridSelectedItem属性:

<DataGridTextColumn Binding="{Binding Name}" Width="Auto"> 
    <DataGridTextColumn.HeaderTemplate> 
     <DataTemplate> 
      <TextBlock Text="{Binding Path=SelectedItem.NameHeader, RelativeSource={RelativeSource AncestorType=DataGrid}}"/> 
     </DataTemplate> 
    </DataGridTextColumn.HeaderTemplate> 
</DataGridTextColumn> 
+0

我怎么没想到这一点..谢谢! –