2013-10-24 65 views
0

我有一個數據模板中的標籤wpf數據網格。我想將文本的顏色綁定到屬性,但它不起作用。如何綁定數據網格中標籤的前景顏色?

這裏是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,它就會起作用。所以這絕對是有約束力的東西。

編輯:

這裏是整個對象

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)); 
     } 
    } 
} 
+0

我敢肯定你需要'DataContextSpy',看到這裏的鏈接:http://stackoverflow.com/questions/5046436/wpf-datagrid-databinding-column-to-pages-viewmodel問題是因爲這不是視覺樹的一部分,所以你不能在那裏訪問綁定。 – gleng

+0

除了'DataContext',你需要使用'INoifyPropertyChanged'接口。但是,恕我直言,我會爲此使用ResourceDictionary。 – Tico

+1

@Tico只有當您確實需要屬性更改通知機制時,您才需要這樣做。這不是問題。 – Clemens

回答

3

您正在使用System.Drawing.Brush,這是從的WinForms,但你應該使用WPF System.Windows.Media.Brush。你的代碼改成這樣:

using System.Windows.Media; 

public Brush PassedColor 
{ 
    get { return new SolidColorBrush(Colors.Red); } 
} 

public Brush PassedColor 
{ 
    get { return Brushes.Red; } 
} 

也許從引用的程序刪除System.Drawing。那麼你會立即發現所有這些缺陷。

+0

嗯,不行。我已經改變它返回一個顏色,而不是一個畫筆,但仍然沒有運氣。但我認爲你是在正確的軌道上。我會繼續玩。 – Smeegs

+0

不返回Color,返回'System.Windows.Media.Brush'而不是'System.Drawing.Brush'。 – Clemens

+0

什麼都沒有。我打算在後面的代碼中更改標籤前景,看看我能否先在網格之外工作。 – Smeegs

相關問題