2017-02-22 73 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

我怎麼沒想到這一點..謝謝! –