2010-04-04 537 views
1

可以说我的数据网格中有2列:列A:已选中,列B:名称。 Selected列是一个复选框。名称列是文本字段。如果选中列A的复选框,我想在'名称'列中将文本的颜色设置为蓝色,否则将其设置为红色。WPF DataGrid绑定列之间的数据

本质上我不知道如何绑定数据网格的列之间的数据。而示例代码/链接提供的例子将是有用的。

回答

0

我还没有使用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; } 
} 
+0

地铁蓝精灵,感谢您的回答。这个对我有用。 – Markus2k 2010-04-19 02:11:31