【问题标题】:How can I change DataGridColumn binding for selected item?如何更改所选项目的 DataGridColumn 绑定?
【发布时间】:2016-10-04 23:30:56
【问题描述】:

假设我有一个绑定到对象集合的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。

【问题讨论】:

    标签: c# wpf xaml datagrid


    【解决方案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" },
            };
        }
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2020-12-29
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-01-07
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多