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>
不知道如何進行比賽,並在XAML轉換 例子: 兩個數據庫.. Db的1 =以下狀態Db的2 =信息 帶領一個狀態=「誠信失敗」,沒有顏色分配。 需要從數據庫1的Lead A到狀態Db2中的狀態。 –
所以在你的XAML中,你會這樣做:{綁定路徑= LeadStatus,轉換器= {StaticResource MyConverter}。在你的轉換器中,WPF將傳遞LeadStatus,然後你只需要做一些事情,比如返回GetBrushFromDB2(status)。如果它們沒有改變,你可以將它們靜態緩存在你的轉換器中以獲得性能。 – SledgeHammer
繁榮!我會給這個鏡頭。謝謝謝謝。 –