데이터 형식의 레이블이있는 wpf DataGrid가 있습니다. 텍스트의 색상을 속성에 바인딩하고 싶습니다. 작동하지 않습니다.DataGrid에서 레이블의 전경색을 바인딩하는 방법은 무엇입니까?
다음은 xaml입니다.
<DataGrid x:Name="ResultsDataGrid" CanUserSortColumns="True" MouseDown="ResultsDataGrid_OnMouseDown" SelectionChanged="ResultsDataGrid_OnSelectionChanged"
IsReadOnly="False" AlternatingRowBackground="WhiteSmoke" CanUserAddRows="False" Margin="10" AutoGenerateColumns="False" VerticalAlignment="Stretch">
<DataGrid.Columns>
<DataGridTemplateColumn Header="Test ID" Width="150" IsReadOnly="True" SortMemberPath="TestDate">
<DataGridTemplateColumn.CellTemplate>
<DataTemplate>
<Label Foreground="{Binding PassedColor}" Content="{Binding TestID}"></Label>
</DataTemplate>
</DataGridTemplateColumn.CellTemplate>
</DataGridTemplateColumn>
</DataGrid.Columns>
</DataGrid>
그리고 여기에 속성이 있습니다.
public Brush PassedColor
{
get
{
return new SolidBrush(Color.Red);
}
}
내가 잘못하고있는 것을 파악하지 못하는 것 같습니다.
바인딩을 제거하고 전경을 red
으로 설정하면 작동합니다. 그래서 그것은 확실히 구속력있는 것입니다.
편집 : 여기
당신은 윈폼에서입니다 System.Drawing.Brush
를 사용하는 전체 개체
public class LabelInfo : INotifyPropertyChanged
{
private bool _isSelected;
private double? _karat;
private bool _passed;
public string TestID { get; set; }
public string Label1 { get; set; }
public string Label2 { get; set; }
public string Value1 { get; set; }
public string Value2 { get; set; }
public string HasPassed { get { return Passed ? "Yes" : "No"; } }
public Brush PassColor
{
get
{
return Brushes.Red;
}
}
public bool Passed
{
get { return _passed; }
set
{
_passed = value;
NotifyPropertyChanged();
}
}
public bool Final { get; set; }
public DateTime? TestDate { get; set; }
public Double RealTime { get; set; }
public string JTVID { get; set; }
public int AnalysisID { get; set; }
public List<ElementResults> Elements { get; set; }
public double Karat
{
get
{
if (_karat == null)
_karat = CalculateKarat();
return _karat.Value;
}
set { _karat = value; }
}
public bool PlatingAlert
{
get
{
return Karat < 7.5;
}
}
public bool IsSelected
{
get { return _isSelected; }
set { _isSelected = value; NotifyPropertyChanged(); }
}
public bool PotentialCoating { get; set; }
private double CalculateKarat()
{
if (Elements == null || Elements.Count == 0) return 0;
return Elements.Where(ex => ex.Name.ToLower().Trim() == "au").Select(ex => ex.Level).FirstOrDefault();
}
public event PropertyChangedEventHandler PropertyChanged;
private void NotifyPropertyChanged([CallerMemberName] String propertyName = "")
{
if (PropertyChanged != null)
{
PropertyChanged(this, new PropertyChangedEventArgs(propertyName));
}
}
}
'DataContextSpy'가 필요합니다. http://stackoverflow.com/questions/5046436/wpf-datagrid-databinding-column-to-pages-viewmodel 문제는 다음과 같습니다. 이는 시각적 트리의 일부가 아니기 때문에 거기에 바인딩에 액세스 할 수 없습니다. – gleng
'DataContext' 외에도'INoifyPropertyChanged' 인터페이스를 사용할 필요가 있습니다. 그러나 IMHO, 나는 이것을 위해 ResourceDictionary를 사용할 것이다. – Tico
@Tico 정말 속성 변경 알림 메커니즘이 필요한 경우에만이 작업을 수행해야합니다. 그것은 여기서 문제가되지 않습니다. – Clemens