【发布时间】:2011-02-04 06:28:52
【问题描述】:
假设我的数据网格中有 2 列:A 列:已选择,B 列:名称。 Selected 列是一个复选框。名称列是文本字段。如果选中 A 列的复选框,我想将“名称”列中文本的颜色设置为蓝色,否则设置为红色。
基本上我不知道如何在数据网格的列之间绑定数据。并且提供示例的示例代码/链接将很有用。
【问题讨论】:
标签: wpf data-binding datagridview datagrid
假设我的数据网格中有 2 列:A 列:已选择,B 列:名称。 Selected 列是一个复选框。名称列是文本字段。如果选中 A 列的复选框,我想将“名称”列中文本的颜色设置为蓝色,否则设置为红色。
基本上我不知道如何在数据网格的列之间绑定数据。并且提供示例的示例代码/链接将很有用。
【问题讨论】:
标签: wpf data-binding datagridview datagrid
我没有太多使用WPF Toolkit's DataGrid,但据我所知,一种方法是使用DataGridTemplateColumn,然后根据绑定设置您的DataTriggers。
这是一个使用 DataTriggers 设置前景色的样式以及整行背景色的示例。值得注意的是,您需要在 ItemsSource 的绑定中添加一个布尔属性,才能使用此方法。
XAML
<Window.Resources>
<Style TargetType="{x:Type tk:DataGridRow}">
<Style.Triggers>
<DataTrigger
Binding="{Binding Path=IsSelected}" Value="True">
<Setter Property="Background" Value="Yellow" />
</DataTrigger>
</Style.Triggers>
</Style>
<Style TargetType="{x:Type TextBlock}" x:Key="MyTextBlockStyle">
<Style.Triggers>
<DataTrigger
Binding="{Binding Path=IsSelected}" Value="True">
<Setter Property="Foreground" Value="Blue" />
</DataTrigger>
<DataTrigger
Binding="{Binding Path=IsSelected}" Value="False">
<Setter Property="Foreground" Value="Red" />
</DataTrigger>
</Style.Triggers>
</Style>
</Window.Resources>
<Grid>
<tk:DataGrid x:Name="MyGrid"
AutoGenerateColumns="False"
ItemsSource="{Binding}">
<tk:DataGrid.Columns>
<tk:DataGridTemplateColumn Header="Selected"
Width="75">
<tk:DataGridTemplateColumn.CellTemplate>
<DataTemplate>
<CheckBox IsChecked="{Binding Path=IsSelected}"/>
</DataTemplate>
</tk:DataGridTemplateColumn.CellTemplate>
</tk:DataGridTemplateColumn>
<tk:DataGridTemplateColumn Header="Name" Width="100" >
<tk:DataGridTemplateColumn.CellTemplate>
<DataTemplate>
<TextBlock Text="{Binding Path=Name}"
Style="{StaticResource MyTextBlockStyle}" />
</DataTemplate>
</tk:DataGridTemplateColumn.CellTemplate>
</tk:DataGridTemplateColumn>
</tk:DataGrid.Columns>
</tk:DataGrid>
</Grid>
代码背后
public partial class DataGridDataTrigger : Window
{
public List<Person> People { get; set; }
public DataGridDataTrigger()
{
InitializeComponent();
var names = new List<string> { "Joe", "Bob", "Frank", "Scott", "Mike" };
People = new List<Person>();
names.ForEach( x => People.Add( new Person { Name = x } ) );
People.ForEach( x =>
{
if( x.Name.Contains( "o" ) )
x.IsSelected = true;
} );
MyGrid.DataContext = People;
}
}
public class Person
{
public string Name { get; set; }
public bool IsSelected { get; set; }
}
【讨论】: