2017-02-22 5 views
3

次のViewModel考えてみましょう:私は私のViewModelのプロパティがINotifyPropertyChangedを実装するためにFody's PropertyChangedを使用していますバインド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; } 
} 

注意を。 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> 

NameHeaderHeaderの結合が動作しません!もちろん、別の行には異なる値のNameHeaderがあることに気付きました。

私が本当に欲しいのは、のバインド列のHeaderで、選択した行がNameHeaderの場合です。それをどうすれば実現できますか?

答えて

1

DataGridSelectedItemプロパティにバインドTextBlockHeaderTemplateを使用します。

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

なぜ私はそのことを考えていなかった...ありがとう! –

関連する問題