我们说我有DataGrid
绑定到一组对象。这些对象具有属性PropertyA
和PropertyB
。我希望第一列显示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。
答案 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" },
};
}
}