2014-02-14 107 views
0

我想更改Abs(Diff)列。這必須在Abs(Diff)中,因爲觀衆想要這樣看。WPF:根據其他列中的其他多個值設置單元格顏色?

ID | TYPE| CURRENT VALUE | TARGET  | ABS(Diff) 
    1 | Sell| 10   | 11   | 1  --> Color Red 
    2 | Sell| 11   | 10   | 1  --> Color Green 
    3 | BUY | 10   | 9   | 1  --> Color Green 
    4 | BUY | 10   | 11   | 1  --> Color Red 

含義: 排1:我有一個項目出售。目前的市場價值是10,我期望在至少(目標)11時賣出。這不符合我的要求。 Abs中的顏色應該是紅色(Diff)

我已看過此內容。 Change DataGrid cell colour based on values 但是,這似乎只是一個值。我如何看多列?

回答

3

你可以添加一個名爲IsPositive一個bool屬性,它象徵着ABS(Diff)值是正還是負。也許是這樣的:

public bool IsPositive 
{ 
    get { return Diff >= 0; } 
} 

然後你需要這樣做是爲了確保它在UI更新時Diff值變化:

public double Diff 
{ 
    get { return diff; } 
    set 
    { 
     diff = value; 
     NotifyPropertyChanged("Diff"); 
     NotifyPropertyChanged("IsPositive"); 
    } 
} 

那麼你應該能做這樣的事情(適合於您的鏈接的問題從例子):

<DataGridTextColumn Binding="{Binding Abs}"> 
    <DataGridTextColumn.ElementStyle> 
     <Style TargetType="{x:Type TextBlock}"> 
      <Style.Triggers> 
       <DataTrigger Binding="{Binding IsPositive}" Value="True"> 
        <Setter Property="Background" Value="LightGreen" /> 
       </DataTrigger> 
       <DataTrigger Binding="{Binding IsPositive}" Value="False"> 
        <Setter Property="Background" Value="Red" /> 
       </DataTrigger> 
       <DataTrigger Binding="{Binding Abs}" Value="0"> 
        <Setter Property="Background" Value="Black" /> 
       </DataTrigger> 
      </Style.Triggers> 
     </Style> 
    </DataGridTextColumn.ElementStyle> 
</DataGridTextColumn> 
+0

第二個DataTrigger是當Value =「False」時。謝謝我不知道如何設置xaml。 – kay00

+0

哦,是的,謝謝你指出,我會更新代碼示例。 – Sheridan

1

但是,這似乎只是一個值。我如何看待多個 列?

如果這是'唯一'的問題,您應該在您的ViewModel public bool ShouldColor中創建另一個屬性,並在那裏設置所需的邏輯。

或者,可以實現通過使用MultiBinding

+0

如果我設置了ShouldColor列。 Abs(Diff)顏色如何根據ShouldColor列更改顏色? xaml中是什麼? – kay00

+0

該示例中的多重綁定設置文本的值。我仍然需要將該值設爲1.是否有隱藏的價值或其他缺失的東西? – kay00

相關問題