2010-12-18 78 views
4

我在我的項目中實現數據差異,現在我需要將結果顯示給用戶。 (我正在檢查任意數據的兩個數組並找到它們之間的不匹配,我的結果如下所示: 「Status:mismatch,Property:... Index:...」(some class))。所以它現在工作得非常好,首先我認爲在DataGrid中突出顯示結果會很容易,但是當我開始實現這一點時,我意識到我無法想象如何完成此操作......我需要突出顯示預設單元格和行...是否存在任何常見的解決方案? P.S DataGrid綁定到一些數據(使用視圖)。我對WPF沒有多少經驗,所以不想重新發明輪子,認爲應該存在一些東西(解決方案,開源項目,代碼示例)。WPF DataGrid行/列/單元格突出顯示

回答

4

以下是您需要的示例。

  1. 我假設,那ChangeItem是存儲一行的類。因此,在xaml中,您將ChangeItem[]綁定到ItemsSource數據網格的屬性。

    class ChangeItem 
    { 
        public string Previous { get; set; } 
        public string Current { get; set; } 
        public bool HasDiff { return this.Previous != this.Current; } 
    } 
    
  2. 在XAML中添加特殊風格,你的資源

    <Style TargetType="{x:Type DataGridCell}"> 
        <Style.Triggers> 
         <DataTrigger Binding="{Binding HasDiff}" Value="true"> 
          <Setter Property="Background" Value="Red"/> 
         </DataTrigger> 
        </Style.Triggers> 
    </Style> 
    
  3. 如果需要支持編輯和實時背景的變化,這取決於所做的更改。然後在ChangeItem中正確實施INotifyPropertyChanged

  4. 如果您需要超過2個狀態(HasError/NoErrors),則創建新的枚舉,表示狀態。例如:

    public enum LineState 
    { 
        Normal, 
        SmallError, 
        MegaError, 
    } 
    

    而更換public bool HasDiff { ... }屬性的東西,如public LineState State { ... }

希望這會有所幫助。

+0

謝謝,我會嘗試這個解決方案 – 2010-12-20 17:23:43

+0

我試過這個解決方案,它不是確切的我想要什麼,我需要突出顯示被修改的單元格,而不是所有的行..怎麼做? – 2010-12-23 17:25:24