2014-09-03 54 views
0

最近我剛開始學習WPF。雖然我的大部分開發經驗來自Win Forms,但我已經設法順利地轉換到WPF。訪問WPF中的dataGrid中的特定行/列

       OVERVIEW 

我正在寫一個程序比較兩個單獨的dataTables中的信息,並反映在dataGrid中所做的更改。

dataTables表示「舊信息」和「新信息」的列表。在比較數據表之後,我希望根據是否在「新信息表」中進行了更改來突出顯示特定的單元格。

一個例子是,如果dataGrid([0] [0])中的第一個單元格包含「Old Information」數據表中的「3」,並且如果同一單元格([0] [0])在「新信息「dataTable包含'5'。我希望將背景顏色改爲黃色,以反映這種變化。

        PROBLEM 

我目前有兩個的數據網格對象,這些對象被填充的工作,並代表雙方數據表(「舊信息」和「新信息」)。我遇到的問題是,我似乎無法很好地訪問特定的行或列。我希望能夠訪問特定的行/單元格,以便通過代碼更改背景顏色。

        Comments 

我記得當我與Win工作表單,你可以沿着dataGrid1.Rows [ROWNUMBER] .Columns [得到columnnumber]訪問特定行/列的行做一些事情。

從我迄今爲止關於WPF dataGrids所讀到的內容來看,他們更基於對象或類似的東西,使訪問特定行/列的過程有點不同/乏味。如果您碰巧知道如何訪問WPF中的dataGrid中的行/單元格內容,請讓我知道。任何簡單的例子將不勝感激。

回答

2

DataGrids非常適合數據綁定,並且可能很難以編程方式訪問和操作其中的行,列和單元格。在使用WPF時,使用MVVM路線是首選方法。在您的情況下,您可以使用底層數據驅動單元格顏色,而不是嘗試編寫代碼隱藏代碼來實現此目的。

MVVM是一個很大的主題,但作爲可能涉及到的東西的味道,您通常會創建一個「模型」類來表示您想要出現在網格行中的實體。您的視圖模型將公開這些對象的集合,這些對象綁定到網格並呈現爲單獨的行(通常您將手動定義XAML中的列,將它們綁定到模型類的各個屬性)。

很難提供一個不知道你的特定網格顯示的例子。但假設您列出了客戶詳細信息 - 第一列可能是名稱,下一列是他們的地址,等等。一種解決方案可能是在模型類中包含額外的布爾屬性以指示特定屬性值是否與其「舊」對應值不同。數據觸發器可以利用這些屬性來更改單元格背景顏色,數據觸發器駐留在應用於數據網格列的CellStyles中。

快速和骯髒的代碼示例了我的頭頂部,所以可能不是100%正確的:

public class Customer 
{ 
    public string CustomerName {get; set;} 
    public string CustomerAddress {get; set;} 
    public bool CustomerNameDiffers {get; set;} 
    public bool CustomerAddressDiffers {get; set;} 
} 

public class MyViewModel 
{ 
    public ObservableCollection<Customer> Customers {get; set;} 

    //etc.. 
} 

XAML:

<Window.Resources> 
    <Style x:Key="CustomerNameCellStyle" 
      TargetType="DataGridTextColumn"> 
     <Style.Triggers> 
      <DataTrigger Binding="{Binding CustomerNameDiffers}" 
         Value="True"> 
       <Setter Property="Background" 
         Value="Yellow" /> 
      </DataTrigger> 
     </Style.Triggers> 
    </Style> 
</Window.Resources> 

<DataGridTextColumn Binding="{Binding CustomerName}" 
        CellStyle="{StaticResource CustomerNameCellStyle}" 
        ... /> 

我意識到這是一個有點廣義的答案,但MVVM是一個很大的話題,但是如果你想充分利用WPF並且隱藏Winforms的代碼隱藏習慣,那麼值得深入瞭解!

+0

謝謝你的洞察!我會玩幾個小時,看看我是否有幸運。 – 2014-09-03 15:26:02