2010-04-04 122 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