아래 화면은 특정 나이를 초과한 사람만  Cell 의 배경을 빨간색으로 표시해서 시각적으로 표현해준다.

 

내용은 아래로 ㄱㄱ

DataGrid

배경색을 IValueConverter 구현해서 특정 조건을 검사한다.

        <DataGrid AutoGenerateColumns="False" HorizontalAlignment="Left" Margin="8,43,0,12" x:Name="dataGrid1" Width="483" SelectionUnit="Cell" >
            <DataGrid.Columns>
                <DataGridTextColumn Header="Name" Binding="{Binding Name}"  Width="100">               
                </DataGridTextColumn>
                <DataGridTextColumn Header="Age" Binding="{Binding Age}"  Width="100">
                    <DataGridTextColumn.CellStyle>
                        <Style TargetType="{x:Type DataGridCell}">
                            <Setter Property="Background">
                                <Setter.Value>
                                    <Binding Converter="{StaticResource BGConvert}"  />
                                </Setter.Value>
                            </Setter>
                        </Style>
                    </DataGridTextColumn.CellStyle>
                </DataGridTextColumn>               
            </DataGrid.Columns>

 

CS Code

namespace UpdateCellWpfApplication
{
    /// <summary>
    /// MainWindow.xaml에 대한 상호 작용 논리
    /// </summary>
    public partial class MainWindow : Window
    {
        List<Person> list = new List<Person>();
        public MainWindow()
        {
            InitializeComponent();

            //구라데이터
            list.Add(new Person() { Age = 10, Name = "kojaedoo"});
            list.Add(new Person() { Age = 17, Name = "중딩"});
            list.Add(new Person() { Age = 22, Name = "대딩"});
            list.Add(new Person() { Age = 30, Name = "아저씨"});
            list.Add(new Person() { Age = 20, Name = "kojaedoo"});
            list.Add(new Person() { Age = 3, Name = "유아"});
            list.Add(new Person() { Age = 65, Name = "할아버지"});         
        
            this.dataGrid1.ItemsSource = list;

            StaticManager.SearchValue = 20; //검사할 나이
        }

        private void button1_Click(object sender, RoutedEventArgs e)
        {
           //검색값이 변경되면 다시 색칠하기 위해서 바인딩을 다시한다 개선되야 할꺼 같따;;;
            StaticManager.SearchValue = int.Parse(this.textBox1.Text);
            this.dataGrid1.ItemsSource = null;
            this.dataGrid1.ItemsSource = this.list;
        }
    }  
}

Person.cs

데이터 바인딩용

public class Person : INotifyPropertyChanged
{
    private string _Name;

    public string Name
    {
        get { return _Name; }
        set
        {
            if (value != this._Name)
            {
                this._Name = value;
                NotifyPropertyChanged("Name");
            }

        }
    }
    private int _Age;

    public int Age
    {
        get
        {
            return _Age;
        }
        set
        {
            if (value != this._Age)
            {
                this._Age = value;
                NotifyPropertyChanged("Age");
            }
        }
    }

    public event PropertyChangedEventHandler PropertyChanged;
    private void NotifyPropertyChanged(string propertyName)
    {
        if (PropertyChanged != null)
        {
            PropertyChanged(this, new PropertyChangedEventArgs(propertyName));
        }
    }

}

StaticManager .cs
public static class StaticManager
{
    public static int SearchValue { set; get; } //나이를 스태틱으로 컨버터안에서 받기위해
}

BGConvert : IValueConverter

나이를 비교해서 브러쉬 색깔을 지정하고 있다.

    public object Convert(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture)
    {
        if (value == null)
        {
            return null;
        }
        Person p = value as Person;
        if (p != null)
        {
            if (p.Age >= StaticManager.SearchValue)
            {
                return Brushes.Red;
            }
            else
            {
                return null;
            }
        }
        else {
            return null;
        }

    }

    public object ConvertBack(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture)
    {
        return value;
    }
}

+ Recent posts