아래 화면은 특정 나이를 초과한 사람만 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;
}
}
'WPF' 카테고리의 다른 글
[GetKeyStates / Ctrl+S] 컨트롤+S 동시누름키값 받아오기 (0) | 2011.01.04 |
---|---|
[WPF AutoComplateBox / ToolKit] 초간단 자동완성 구현하기 (0) | 2010.12.23 |
[WPF ToolKit] WPF 툴킷 /Extended 툴킷 다운로드 (0) | 2010.12.23 |
[WPF Key.Enter]엔터키 이동 (0) | 2010.12.22 |
[WPF Ribbon 컨트롤] Windows Xp 오류 문제 (0) | 2010.12.17 |
[WPF Blend4/MouseDrag/MouseDragElementBehavior ] 창 가운데 띄우기 / 마우스드래그 (0) | 2010.11.24 |
WPF Dialog Box/ ValidationRule 파일열기 유효성검사 (0) | 2010.10.20 |
[ADO.NET Entity Data Model ]실버라이트 초간단 데이터 바인딩 (0) | 2010.10.14 |
[VisualTreeHelper] 부모컨트롤 찾기 / 자식컨트롤 찾기 (0) | 2010.09.16 |
[DependencyObject.GetValue] 사용하기 (0) | 2010.09.16 |