2010-04-04 5 views
1

Допустим, у меня есть 2 столбца в моих данных Grid: Столбец A: Выбранный и Column B: Name. Выбранный столбец - это флажок. И столбец Name - текстовое поле. Я хочу установить цвет текста в столбце «Имя» как «Синий», если флажок «Столбец А» отмечен, а Красный - иначе.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

Metro Smurf, спасибо за ответ. Меня устраивает. – Markus2k

Смежные вопросы