2012-08-23 57 views
0

我有一個比較兩個dataTable中的數據的方法。比較之後,我想要在WPF dataGRID中將這些比較數據(它們在新的DataTable中稱爲ChangeTab)可視化。從DataContext的如何設置WPF中的特定單元格中的文本顏色DataGRID

I'm填充數據網格:

win.TableOfChange.DataContext = ChangeTab.DefaultView; 
<DataGrid ItemsSource="{Binding}" Height="107" HorizontalAlignment="Left".... 

I'm戰鬥與問題,如何可視化,其是不同的(在數據表)由紅其是相同的數據,和數據與綠色 - 類似像在圖片:

enter image description here

有一個辦法,那怎麼辦(顏色設定爲WPF DataGrid單元格的一些紅色和一些來自C#的綠色)?

非常感謝!

+0

是否有任何業務邏輯用於設置顏色? – HichemSeeSharp

+0

不,這是我的建議。我想通過綠色顯示未改變的值,並通過紅色改變值。 – VilemRousi

回答

1

我假設你在比較過程中構建源表,如果是的話,你可以很容易地存儲一個表示相等的布爾值。然後在CellStyle中,您可以在該屬性上使用DataTrigger,然後SetterTextElement.Foreground屬性更改爲所需的值。

+0

@VilemRousi:哪種綁定? (MikeKulls的答案給出了一個很好的概要,你只需要把這個前臺綁定到'DataTrigger.Binding'沒有轉換器當然) –

+0

非常感謝你的回答,我認爲這是一個好方法,但我不確定綁定和我無法解決它。 因爲比較的結果只是一行,所以我可以通過比較狀態(0-無變化,1-新值,2-變化)將此行添加到此DataTable新行中。所以比較表(**名稱:treti **)的列現在有2行(值和比較狀態)。 問題在於綁定。我正在嘗試這樣的: ' ' 但是,這並不奏效。請你能再幫我一次嗎? – VilemRousi

+0

@VilemRousi:你需要擁有單元級別的信息,並在單元級別應用觸發器('CellStyle'),使用全行工作不會奏效。 –

0

我傾向於爲網格中的大多數列使用DataTemplates。您將需要創建一個類,像這樣:

class CellContent 
{ 
    public object Content { get; set; } 
    public bool IsDifferent { get; set; } 
} 

然後創建一個DataTemplate是這樣的:

<DataTemplate x:Key="bob"> 
    <ContentPresenter Content="{Binding Path=Content}" TextElement.Foreground="{Binding Path=IsDifferent, Converter={StaticResource myConverter}}" /> 
<DataTemplate> 

然後,您可以將模板分配到每一列。

另一個可能更好的選擇是在IsDifferent爲true時使用觸發器來改變顏色。

相關問題