【问题标题】:WPF DataGrid bind data between columnsWPF DataGrid 在列之间绑定数据
【发布时间】:2011-02-04 06:28:52
【问题描述】:

假设我的数据网格中有 2 列:A 列:已选择,B 列:名称。 Selected 列是一个复选框。名称列是文本字段。如果选中 A 列的复选框,我想将“名称”列中文本的颜色设置为蓝色,否则设置为红色。

基本上我不知道如何在数据网格的列之间绑定数据。并且提供示例的示例代码/链接将很有用。

【问题讨论】:

    标签: wpf data-binding datagridview datagrid


    【解决方案1】:

    我没有太多使用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; }
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2011-05-06
      • 2012-08-17
      • 2011-06-15
      • 2016-04-30
      • 2011-03-22
      • 2017-05-02
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多