最近新接个项目,用wpf做的系统从来没有做过,画面是xaml的文件,后台用c#太困难了,找个属性都找不到
现在需要在前台DATAGRID中根据数据动态设置单元格的背景属性,查了半天,光知道是需要绑定的,但是具体步骤还是不清楚
无从下手阿,
    哪位高手做过给指条名路吧,谢谢!
    

解决方案 »

  1.   

    后台写一个类继承IValueConverter,里面实现根据数据返回背景Brush,然后在xaml里面声明Resources,再将单元格背景色绑定到该资源键值。
      

  2.   

    能具体点有代码吗,
    大概流程我清楚了,但是前台的xaml文件里面如何定义能使绑定的值只针对某一个单元格
    后台代码我看网上的资料说是在model里写属性设置,但是具体怎么写啊
      

  3.   


    <Window x:Class="WpfApplication11.MainWindow"
            xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
            xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
            xmlns:local="clr-namespace:WpfApplication11"
            Title="MainWindow" Height="350" Width="525">
        <Window.Resources>
            <local:ConVerter x:Key="Converter" />
        </Window.Resources>
        <DataGrid AutoGenerateColumns="False" Height="310" Name="dataGrid1" Width="346" ItemsSource="{Binding}">
            <DataGrid.Columns>
                <DataGridTextColumn Binding="{Binding Path=A}" Header="Header"  />
                <DataGridTextColumn Binding="{Binding Path=B}"  Header="Header"  />
            </DataGrid.Columns>
            <DataGrid.CellStyle>
                <Style TargetType="DataGridCell" >
                    <Setter Property="Background" Value="{Binding Path=A, Converter={StaticResource Converter}}"/>
                </Style>
            </DataGrid.CellStyle>
        </DataGrid>
    </Window>
        public partial class MainWindow : Window
        {
            DataTable dt = new DataTable();
            public MainWindow()
            {
                dt.Columns.Add("A",typeof(int));
                dt.Columns.Add("B",typeof(int));
                for (int i = 0; i < 20; i++)
                {
                    DataRow dr = dt.NewRow();
                    dr[0] = i;
                    dr[1] = i + 5;
                    dt.Rows.Add(dr);
                }
                dt.AcceptChanges();
                InitializeComponent();
                dataGrid1.DataContext = dt.DefaultView;
            }
        }
        public class ConVerter : IValueConverter
        {        public object Convert(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture)
            {
                if ((int)value > 10)
                {
                    return Brushes.Blue;
                }
                else
                {
                    return Brushes.Green;
                }
            }        public object ConvertBack(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture)
            {
                throw new NotImplementedException();
            }
        }
      

  4.   

    或者把XAML写为这样,可以在同一行也有不同的颜色,如有帮助请尽快结帖,超过两千分够了五个三角就不在这里浪费时间了。
    [code=XML]
    <Window x:Class="WpfApplication11.MainWindow"
            xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
            xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
            xmlns:local="clr-namespace:WpfApplication11"
            Title="MainWindow" Height="350" Width="525">
        <Window.Resources>
            <local:ConVerter x:Key="Converter" />
        </Window.Resources>
        <DataGrid AutoGenerateColumns="False" Height="310" Name="dataGrid1" Width="346" ItemsSource="{Binding}">
            <DataGrid.Columns>
                <DataGridTextColumn Binding="{Binding Path=A}" Header="Header1">
                    <DataGridTextColumn.CellStyle>
                        <Style TargetType="DataGridCell" >
                            <Setter Property="Background" Value="{Binding Path=A, Converter={StaticResource Converter}}"/>
                        </Style>
                    </DataGridTextColumn.CellStyle>
                </DataGridTextColumn>
                <DataGridTextColumn Binding="{Binding Path=B}"  Header="Header2">
                    <DataGridTextColumn.CellStyle>
                        <Style TargetType="DataGridCell" >
                            <Setter Property="Background" Value="{Binding Path=B, Converter={StaticResource Converter}}"/>
                        </Style>
                    </DataGridTextColumn.CellStyle>
                </DataGridTextColumn>
            </DataGrid.Columns>
        </DataGrid>
    </Window>
    /code]
      

  5.   


    <Window x:Class="WpfApplication11.MainWindow"
            xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
            xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
            xmlns:local="clr-namespace:WpfApplication11"
            Title="MainWindow" Height="350" Width="525">
        <Window.Resources>
            <local:ConVerter x:Key="Converter" />
        </Window.Resources>
        <DataGrid AutoGenerateColumns="False" Height="310" Name="dataGrid1" Width="346" ItemsSource="{Binding}">
            <DataGrid.Columns>
                <DataGridTextColumn Binding="{Binding Path=A}" Header="Header1">
                    <DataGridTextColumn.CellStyle>
                        <Style TargetType="DataGridCell" >
                            <Setter Property="Background" Value="{Binding Path=A, Converter={StaticResource Converter}}"/>
                        </Style>
                    </DataGridTextColumn.CellStyle>
                </DataGridTextColumn>
                <DataGridTextColumn Binding="{Binding Path=B}"  Header="Header2">
                    <DataGridTextColumn.CellStyle>
                        <Style TargetType="DataGridCell" >
                            <Setter Property="Background" Value="{Binding Path=B, Converter={StaticResource Converter}}"/>
                        </Style>
                    </DataGridTextColumn.CellStyle>
                </DataGridTextColumn>
            </DataGrid.Columns>
        </DataGrid>
    </Window>
      

  6.   

    xmlns:local="clr-namespace:WpfApplication11"
    表明命名空间
    <local:ConVerter x:Key="Converter" />
    该命名空间下的类名,然后定义一个键值
      

  7.   

    因为整个上下文的数据源都是datatable,所以path=A或B在整个上下文中都是起作用的
      

  8.   

    我这个是web的,不是winform的没有datatable,只有datacontext=model
      

  9.   

          这个是我刚刚写的前台
     <my:DataGrid ItemsSource="{Binding}" Grid.Column="3" Grid.Row="3" Height="120" HorizontalAlignment="Left" Margin="1,0,0,0" Name="dataGrid1" VerticalAlignment="Bottom" Width="1000" Grid.ColumnSpan="5" SelectionMode="Single" SelectionUnit="Cell">
                <my:DataGrid.Columns>
                    <my:DataGridTextColumn Header="週間" Width="80" Binding="{Binding Path=Name}">
                        <my:DataGridTextColumn.CellStyle>
                            <Style TargetType = "my:DataGridCell">
                                <Setter Property="Background" Value="{Binding Path=Name, Converter={StaticResource Converter}}">                            </Setter>
                            </Style >
                        </my:DataGridTextColumn.CellStyle>
                    </my:DataGridTextColumn>            </my:DataGrid.Columns>
             </my:DataGrid>这个是后台的新建的CLASS文件
    public class ConVerter : IValueConverter
    {    public object Convert(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture)
        {
            if ((int)value > 10)
            {
                return Brushes.Blue;
            }
            else
            {
                return Brushes.Green;
            }
        }    public object ConvertBack(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture)
        {
            throw new NotImplementedException();
        }
    }
      

  10.   


      <my:DataGrid Grid.Row="1" AutoGenerateColumns="False" ItemsSource="{Binding}" HorizontalAlignment="Center" VerticalAlignment="Top" Name="dataGrid1" SelectionMode="Single"
                             Height="342" Width="780" RowBackground="#FFDFF0F4" AlternatingRowBackground="#FFD0DEE6" ColumnHeaderHeight="25" RowHeight="25" RowHeaderWidth="0"
                             HorizontalGridLinesBrush="#FF7E9AB0" VerticalGridLinesBrush="#FF7E9AB0" Background="White" CanUserAddRows="False" CanUserDeleteRows="False"
                             CanUserResizeRows="False" MouseDoubleClick="dataGrid1_MouseDoubleClick">
                    <my:DataGrid.ColumnHeaderStyle>
                        <Style TargetType="my:DataGridColumnHeader" >
                            <Setter Property="Background" Value="#FFBFCFDC"/>
                            <Setter Property="SeparatorVisibility" Value="Visible" />
                            <Setter Property="SeparatorBrush" Value="Black" />
                        </Style>
                    </my:DataGrid.ColumnHeaderStyle>
                    <my:DataGrid.Columns>
                        <my:DataGridTemplateColumn Header="选择" Width="0.03*">
                            <my:DataGridTemplateColumn.CellTemplate>
                                <DataTemplate>
                                    <CheckBox Name="chkPrint" IsChecked="{Binding IsChecked}" Click="chkPrint_Click"></CheckBox>
                                </DataTemplate>
                            </my:DataGridTemplateColumn.CellTemplate>
                        </my:DataGridTemplateColumn>
                        <my:DataGridTextColumn Header="序号" IsReadOnly="True" Binding="{Binding Order}" Width="0.03*"/>
                        <!--<my:DataGridTextColumn Header="病区/科室" IsReadOnly="True" Binding="{Binding Col_Name}" Width="0.1*"/>-->
                        <my:DataGridTextColumn Header="制单时间" IsReadOnly="True" Binding="{Binding CreateTime, Converter={StaticResource DataTimeConverter}}" Width="0.14*"/>
                        <my:DataGridTextColumn Header="单据编号" IsReadOnly="True" Binding="{Binding No}" Width="0.1*"/>
                        <my:DataGridTextColumn Header="单据类型" IsReadOnly="True" Binding="{Binding TypeName}" Width="0.1*"/>
                        <my:DataGridTextColumn Header="数量" IsReadOnly="True" Binding="{Binding Quantity}" Width="0.1*"/>
                        <my:DataGridTextColumn Header="制单人" IsReadOnly="True" Binding="{Binding Handler}" Width="0.1*"/>
                    </my:DataGrid.Columns>            </my:DataGrid>
      

  11.   

    楼上的那个Binding="{Binding CreateTime, Converter={StaticResource DataTimeConverter}}" 
    这里面的DataTimeConverter是怎么倒进来的,我现在老是题是我找不到这个名字啊
      

  12.   

    谢谢你了哥们,我感激涕零了都。
    不管是啥数据源,肯定都实现了IEnumerable接口,绑定方式和dataview都是一样的。