WPF에서 셀 값이 연속적으로 변경되는 DataGrid를 만들었지 만 이전 값과 비교하여 셀의 백채를 변경할 수는 없습니다 예 : 예를 들어 셀의 값이 10에서 20으로 변경되면 셀의 색이 녹색으로 변하여 값이 증가하고 값이 5가되면 셀 백 색이 빨간색으로 표시되어 값이 감소되었음을 나타냅니다 . 나는 winforms에서 datagridview의 cellvaluechange 이벤트를 수행했지만 WPF에서는 동일한 작업을 수행 할 수 없다. 전문가 중 누구라도 그 일에 관해 아무 것도하지 않았습니다.WPF DataGrid에서 이전 셀 값에 대해 DataGrid 셀 백채를 변경합니다.
1
A
답변
1
세포의 DataContext
에 IsIncreased
속성을 생성하여 Nullable<bool>
을 증가/감소로 유지합니다.
public class DatagridCellViewModel: INotifyPropertyChanged
{
public event PropertyChangedEventHandler PropertyChanged;
protected void FirePropertyChanged(string propertyName)
{
if (PropertyChanged != null)
PropertyChanged(this, new PropertyChangedEventArgs(propertyName));
}
private bool _isIncreased
public bool? IsIncreased
{
get{ return _isIncreased; }
set{
_isIncreased = value,
FirePropertyChanged("IsIncreased");
}
}
//this is going to store the value you have in your table. Don't forget to bind it to the cells content
private int _dataValue;
public int DataValue
{
get{ return _dataValue; }
set{
if(_dataValue != value)
{
IsIncreased = _dataValue < value
_dataValue= value;
FirePropertyChanged("DataValue");
}
}
}
//other properties and methods
}
public class DataGridViewModel
{
private ICollection<DataGridRowViewModel> _myDgRows = new ObservableCollection<DataGridRowViewModel>();
public ObservableCollection<DataGridRowViewModel> MyDgRows { get{ return _myDgRows;}
}
public class DataGridRowViewModel : INotifyPropertyChanged // don't forget to implement this interface
{
//put here fields and properties you want to display in a row in your datagrid
//that means as many fields as many columns you have
private DataGridCellViewModel _cellValue;
public int CellValue
{
get{ return _cellValue; }
set{
if(!_cellValue.Equals(value))
{
_cellValue= value;
FirePropertyChanged("CellValue");
}
}
}
}
는 IsIncreased
값에 따른 셀의 배경을 설정하는 DataTrigger
을 작성
<DataGrid ItemsSource="{Binding MyDgRows}" AutoGenerateColumns="False" >
<DataGrid.Columns>
<DataGridTemplateColumn Header="ChangingValues" Width="SizeToCells">
<DataGridTemplateColumn.CellTemplate>
<DataTemplate>
<TextBox Name="ContentTbx" Text="{Binding CellValue.DataValue}" />
<DataTemplate.Triggers>
<DataTrigger Binding="{Binding CellValue.IsIncreased}" Value="True">
<Setter Property="Background" Value="Green" />
</DataTrigger>
<DataTrigger Binding="{Binding CellValue.IsIncreased}" Value="False">
<Setter TargetName="ContentTbx" Property="Background" Value="Red"/>
</DataTrigger>
</DataTemplate.Triggers>
</DataTemplate>
</DataGridTemplateColumn.CellTemplate>
</DataGridTemplateColumn>
</DataGrid.Columns>
</DataGrid>
는 셀 데이터 소품 변경마다 소품 IsIncreased 설정
EDIT : 테이블을 바인딩하지 않지만 ObservableCollecition이 MyDgRows를 호출합니다. 이를 위해 DataGridViewModel 인스턴스가 DataGrids DataContext 여야합니다.
아마도 DataValue 소품에서 int-string 변환을 처리해야합니다. 그 문제에 대한
나는
가 첫 번째 링크는 this
및
을 DataTemplate을 한 데이터 그리드datatriggers이
WPF
을 봤두 번째 결과는 this
이며 거의 모든 문제를 다룹니다. 자급 자족하십시오
관련 문제
- 1. WPF 일반 DataGrid CellTemplate - 셀 값에 바인딩?
- 2. WPF DataGrid에서 셀 클릭시 충돌 (해결됨)
- 3. DataGrid에서 선택한 열/셀
- 4. DataGrid (WPF)의 셀 편집
- 5. WPF DataGrid에서 셀 레벨 ComboBox를 애스펙트하는 방법?
- 6. wpf 툴킷 DataGrid에서 셀 테두리를 숨기는 방법?
- 7. 셀 스타일의 WPF DataGrid - 같은 열의 다른 셀 스타일
- 8. 셀 값의 비교를 기반으로 WPF DataGrid 셀 글꼴을 변경하십시오.
- 9. DataGrid에서 셀 지우기
- 10. DataGrid에서 셀 사용 안함
- 11. WPF Toolkit DataGrid SelectionChanged 설정 셀 값
- 12. WPF DataGrid 셀 텍스트 상자 컨트롤
- 13. C# wpf mvvm datagrid 셀 편집
- 14. 단추를 사용하여 WPF DataGrid 셀 편집
- 15. WPF Datagrid : 프로그래밍 방식으로 셀 편집
- 16. 바인딩을 사용하는 WPF DataGrid 셀 배경
- 17. Wpf Datagrid 가상화 셀 색 설정시의 문제
- 18. 플렉스 에어 DataGrid setfocus 셀 단위 셀
- 19. 선택한 DataGrid 셀 병합
- 20. Datagrid 확인란 셀
- 21. 동적으로 테이블의 셀 유형을 변경합니다.
- 22. DataGrid에서 행 머리글 셀 병합
- 23. wpf 표 셀 사용자 정의
- 24. DataGrid 행 배경이 셀 값을 기준으로합니다.
- 25. WPF DataGrid SelectionChanged 이벤트 취소 셀 포커스 문제
- 26. 에서 Datagrid 셀 클릭 이벤트는
- 27. Silverlight datagrid 특정 셀 비활성화
- 28. DataGrid 셀 머리글 캡처 클릭
- 29. DataGrid 셀 값을 얻는 방법
- 30. RowDetailsTemplate 안에있는 WPF DataGrid의 셀 선택
도움 주셔서 감사합니다. 데이터 테이블로 DataGrid를 바인딩하는 경우 해당 작업을 알면됩니다. 또한 행사를 언제 어떻게해야합니까? datarow를 업데이트 할 때? 죄송 합니다만 "FirePropertyChanged"필드 스텁을 정교하게 작성하십시오. –
PropertyChanged가 항상 null이되는 이유는 무엇입니까? 언제 내 코드에서이 속성을 변경해야합니까? 이 작은 것들을 묻는 것에 유감스럽게 생각하지만 처음으로하고 있습니다. 그런 식으로 도와주세요. –
DatagridCellViewModel obj = new DatagridCellViewModel(); 을 DataRowView의 DR이 = (을 DataRowView) mygrid.Items [0]; dr [3] = newvalue; obj.DataValue = newvalue; mygrid.Items.Refresh(); 항상 IsIncreased 내가 참 또는 거짓, 그에 따라 datavalue를 업데이트하고 때 변경됩니다. 하지만 여전히 proprtychanged null을 받고 있는데, 나는 무엇인가 놓치고 있습니까? 제발 .. 도와주세요! –