2015-07-20 117 views
1

我是WPF的新手,無法使用數據綁定模板。我搜索了幾個小時,並努力尋找一種方法來完成這項工作。從SQL數據庫動態分配行顏色到ListView WPF

我有一個從sql server填充的列表視圖。在列表視圖中,我希望行更改顏色以匹配其適當的狀態。我想避免給Lead類分配一個顏色,所以我需要從SQL表中提取顏色並動態設置它們。下面的代碼與點擊按鈕一起工作,可能會作爲一種方法工作,但顯然這不是「WPF方式」。我怎樣才能做到這一點「正確」的方式?

注意:每個狀態和它們各自的顏色將始終不同。

private void addLeadButton_Click(object sender, RoutedEventArgs e) 
{ 
    DataTable sqlColorList = SqlLoader.selectFromSqlDatabase("Select * FROM statusTable"); 

    int i = 0; 
    foreach (Lead test in LeadListView.Items) 
    { 
     foreach (DataRow color in sqlColorList.Rows) 
     { 
      if (test.LeadStatus == color["status"].ToString()) 
      { 
       ListViewItem row = LeadListView.ItemContainerGenerator.ContainerFromIndex(i) as ListViewItem; 
       row.Background = (Brush)new System.Windows.Media.BrushConverter().ConvertFromString(color["color"].ToString()); 
      } 
     } 
     i++; 
    } 
} 


<ListView x:Name="LeadListView" Width="494" Margin="10,127,0,34"  HorizontalAlignment="Left"> 
    <ListView.ItemContainerStyle> 
     <Style TargetType="{x:Type ListViewItem}"> 
      <Setter Property="Foreground" Value="Black" /> 
      <Setter Property="BorderBrush" Value="LightGray" /> 
      <Setter Property="BorderThickness" Value="0,0,0,1" /> 
     </Style> 
    </ListView.ItemContainerStyle> 

    <ListView.View> 
     <GridView> 
      <GridViewColumn Header="First Name" Width="121" DisplayMemberBinding="{Binding LeadFirstName}"/> 
      <GridViewColumn Header="Last Name" Width="121" DisplayMemberBinding="{Binding LeadLastName}"/> 
      <GridViewColumn Header="Status" Width="121" DisplayMemberBinding="{Binding LeadStatus}"/> 
      <GridViewColumn Header="Date" Width="121" DisplayMemberBinding="{Binding LeadDate, StringFormat='MM/dd/yyyy'}"/> 
     </GridView> 
    </ListView.View> 
</ListView> 

回答

1

你不應該在代碼中這樣做。在您的XAML中,只需將Background屬性綁定到LeadStatus屬性並指定一個值轉換器將其從LeadStatus轉換爲Brush。

+0

不知道如何進行比賽,並在XAML轉換 例子: 兩個數據庫.. Db的1 =以下狀態Db的2 =信息 帶領一個狀態=「誠信失敗」,沒有顏色分配。 需要從數據庫1的Lead A到狀態Db2中的狀態。 –

+0

所以在你的XAML中,你會這樣做:{綁定路徑= LeadStatus,轉換器= {StaticResource MyConverter}。在你的轉換器中,WPF將傳遞LeadStatus,然後你只需要做一些事情,比如返回GetBrushFromDB2(status)。如果它們沒有改變,你可以將它們靜態緩存在你的轉換器中以獲得性能。 – SledgeHammer

+0

繁榮!我會給這個鏡頭。謝謝謝謝。 –