【问题标题】:Bind DataGridColumnHeader with selected row's property将 DataGridColumnHeader 与所选行的属性绑定
【发布时间】:2017-02-22 09:46:08
【问题描述】:

考虑以下 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>

HeaderNameHeader 的绑定不起作用!当然,然后我意识到不同的行会有不同的NameHeader 值。

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

【问题讨论】:

    标签: c# wpf xaml data-binding wpfdatagrid


    【解决方案1】:

    HeaderTemplate 与绑定到DataGridSelectedItem 属性的TextBlock 结合使用:

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-01-25
      • 2013-03-25
      • 1970-01-01
      • 2017-01-07
      • 1970-01-01
      相关资源
      最近更新 更多