2017-02-22 2 views
3

Betrachten Sie das folgende Ansichtsmodell:Bind DataGridColumnHeader mit ausgewählter Zeile Eigentum

public class MyViewModel 
{ 
    public ObservableCollection<Foo> foos { get; set; } 
} 

[PropertyChanged.ImplementPropertyChanged] 
public class Foo 
{ 
    public string Name { get; set; } 
    public string NameHeader { get; set; } 
} 

Bitte beachte, dass ich Fody's PropertyChanged bin mit meiner Ansichtsmodell Eigenschaften INotifyPropertyChanged implementieren lassen.

Und ich habe folgende 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> 

Die Bindung von Header mit NameHeader wird nicht funktionieren! Natürlich habe ich dann festgestellt, dass verschiedene Zeilen unterschiedliche Werte von NameHeader haben.

Also, was ich wirklich will, ist zu binden Spalte Header mit ausgewählten Zeile des NameHeader. Wie kann ich das erreichen?

Antwort

1

Verwenden Sie ein HeaderTemplate mit einem TextBlock die SelectedItem Eigenschaft des DataGrid bindet an das:

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

Warum nicht dachte ich an, dass .. Dank! –

Verwandte Themen