數據網格/列表框的ItemsControls,做工精良跟單託收。我建議使用來自list1和list2的一對項目創建額外的對象列表,其中和屬性指示不同的項目,然後在UI中顯示該列表。
var L1 = new List<int> {1, 2, 3, 4, 5};
var L2 = new List<int> {1, 2, 0, 4, 5};
var results = L1.Zip(L2, (i, j) => new {Previous = i, Current = j, IsDifferent = i != j});
ListResults.ItemsSource = results;
<ItemsControl Name="ListResults">
<ItemsControl.ItemTemplate>
<DataTemplate>
<UniformGrid Rows="1">
<UniformGrid.Style>
<Style TargetType="UniformGrid">
<Style.Triggers>
<DataTrigger Binding="{Binding Path=IsDifferent}" Value="true">
<Setter Property="Background" Value="Crimson"/>
</DataTrigger>
</Style.Triggers>
</Style>
</UniformGrid.Style>
<Label Content="{Binding Path=Previous}"/>
<Label Content="{Binding Path=Current}"/>
</UniformGrid>
</DataTemplate>
</ItemsControl.ItemTemplate>
</ItemsControl>
替代與數據表/數據網格
var L1 = new List<int> {1, 2, 3, 4, 5};
var L2 = new List<int> {1, 2, 0, 4, 5};
var dt = new DataTable
{
Columns =
{
{"Previous", typeof (int)},
{"Current", typeof (int)},
{"IsDifferent", typeof (bool)},
}
};
for (int x = 0; x < L1.Count; x++)
dt.Rows.Add(L1[x], L2[x], L1[x] != L2[x]);
DgResults.ItemsSource = dt.DefaultView;
<DataGrid Name="DgResults" AutoGenerateColumns="False" ColumnWidth="*" IsReadOnly="True">
<DataGrid.RowStyle>
<Style TargetType="DataGridRow">
<Style.Triggers>
<DataTrigger Binding="{Binding Path=IsDifferent}" Value="true">
<Setter Property="Background" Value="Crimson"/>
</DataTrigger>
</Style.Triggers>
</Style>
</DataGrid.RowStyle>
<DataGrid.Columns>
<DataGridTextColumn Binding="{Binding Path=Previous}"/>
<DataGridTextColumn Binding="{Binding Path=Current}"/>
</DataGrid.Columns>
</DataGrid>
屬性IsDifferent
用於DataTrigger以更改背景
真棒和直接!有沒有一種方法來修改'ItemSource'行來使用DataTable與列Previous,Current,IsDifferent替代? – windowskm
@windowskm,是:'ListResults.ItemsSource = myDataTable.DefaultView;' – ASh