如何更改所选项的DataGridColumn绑定?

时间:2016-10-04 23:30:57

标签: c# wpf xaml datagrid

我们说我有DataGrid绑定到一组对象。这些对象具有属性PropertyAPropertyB。我希望第一列显示PropertyA但是当我选择一行时,我希望所选行只显示PropertyB。我怎么能这样做?

对象

public class MyObject
{
  public string PropertyA { get; set; }
  public string PropertyB { get; set; }
}

xaml

<DataGrid ItemsSource="{Binding Path=MyObjects}">
  <DataGrid.Columns>
    <DataGridTextColumn Header="Foo" Binding="{Binding Path=PropertyA}" />
  </DataGrid.Columns>
</DataGrid>

这将显示PropertyA中数据网格中每一行的值。但是当我选择一行时,我只希望该行改为显示PropertyB。

1 个答案:

答案 0 :(得分:1)

试试这个:

<强> XAML:

   Window x:Class="WpfApplication296.MainWindow"
        xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
        xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
        xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
        xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
        xmlns:local="clr-namespace:WpfApplication296"
        mc:Ignorable="d"
        Title="MainWindow" Height="300" Width="300">

    <Window.Resources>

        <DataTemplate x:Key="TemplateA">
            <TextBlock Text="{Binding PropertyA}" FontSize="24" />
        </DataTemplate>

        <DataTemplate x:Key="TemplateB">
            <TextBlock Text="{Binding PropertyB}" FontSize="24"/>
        </DataTemplate>

        <Style x:Key="DataGridCellStyle1" 
               TargetType="{x:Type DataGridCell}" 
               BasedOn="{StaticResource {x:Type DataGridCell}}">
            <Setter Property="ContentTemplate" Value="{StaticResource TemplateA}"/>
            <Style.Triggers>
                <Trigger Property="IsSelected" Value="True">
                    <Setter Property="ContentTemplate" Value="{StaticResource TemplateB}"/>
                </Trigger>
            </Style.Triggers>
        </Style>

    </Window.Resources>

    <Window.DataContext>
        <local:MyViewModel/>
    </Window.DataContext>

    <Grid>

        <DataGrid ItemsSource="{Binding MyObjects}" 
                  AutoGenerateColumns="False">
            <DataGrid.Columns>
                <DataGridTextColumn Header="Foo" 
                                    Width="*"
                                    Binding="{Binding PropertyA}" 
                                    CellStyle="{StaticResource DataGridCellStyle1}" />
            </DataGrid.Columns>
        </DataGrid>

    </Grid>
</Window>

<强>视图模型:

public class MyViewModel
{
    public ObservableCollection<MyObject> MyObjects { get; set; }

    public MyViewModel()
    {
        MyObjects = new ObservableCollection<MyObject>
        {
            new MyObject {PropertyA = " AAA 101", PropertyB=" BBBBBB 001" },
            new MyObject {PropertyA = " AAA 102", PropertyB=" BBBBBB 002" },
            new MyObject {PropertyA = " AAA 103", PropertyB=" BBBBBB 003" },
            new MyObject {PropertyA = " AAA 104", PropertyB=" BBBBBB 004" },
            new MyObject {PropertyA = " AAA 105", PropertyB=" BBBBBB 005" },
        };
    }
}

enter image description here