當底層數據屬性更改時,我遇到Silverlight UI數據網格未更新的問題。如果我引入臨時變量並更新一個塊中的數據,但不明白爲什麼原始代碼不起作用,我可以使其工作。更新LINQ子句中的屬性會將數據綁定分解爲UI
這是Web UI部分的XAML代碼:
<C1:C1DataGrid ItemsSource="{Binding DeliveryAccuracyTotals}"
HeadersVisibility="Column"
AutoGenerateColumns="False">
<C1:C1DataGrid.Columns>
<C1:DataGridDateTimeColumn Binding="{Binding PlannedAcceptanceDate}"
Header="{Binding Date,
Source={StaticResource res}}"
Format="dd.MM.yyyy" />
<C1:DataGridNumericColumn Binding="{Binding OKcount}"
Header="{Binding OK, Source={StaticResource res}}" />
<C1:DataGridNumericColumn Binding="{Binding NOKcount}"
Header="{Binding NOK, Source={StaticResource res}}" />
<C1:DataGridNumericColumn Binding="{Binding OKpercentage}"
Header="%" Format="0.##"/>
</C1:C1DataGrid.Columns>
</C1:C1DataGrid>
我對處理數據時的異步數據讀取完成回調處理程序:
private void handleDeliveryAccuracyReportDataCallBack(List<DeliveryAccuracyReportDataRow> data)
{
DeliveryAccuracyTotals.Clear();
if (data != null)
{
data.GroupBy(row => row.PlannedAcceptanceDate)
.ToList()
.ForEach(group =>
DeliveryAccuracyTotals.Add(new DeliveryAccuracyTotalData(group.ToList())));
}
}
它使用以下屬性通知用戶界面的變化。
public List<DeliveryAccuracyTotalData> DeliveryAccuracyTotals
{
get
{
if (_deliveryAccuracytotals == null)
{
_deliveryAccuracytotals = new List<DeliveryAccuracyTotalData>();
}
return _deliveryAccuracytotals;
}
private set
{
_deliveryAccuracytotals = value;
NotifyPropertyChanged("DeliveryAccuracyTotals");
}
}
如果我跑這一點,DeliveryAccuracyTotals屬性,都會有新的數據正確填充,但用戶界面不會顯示新的數據!
然而,當我的回調代碼改變這一點,它的工作原理:
private void handleDeliveryAccuracyReportDataCallBack(List<DeliveryAccuracyReportDataRow> data)
{
var temp = new List<DeliveryAccuracyTotalData>();
if (data != null)
{
data.GroupBy(row => row.PlannedAcceptanceDate)
.ToList()
.ForEach(group =>
temp.Add(new DeliveryAccuracyTotalData(group.ToList())));
}
DeliveryAccuracyTotals = temp;
}
誰能解釋什麼是怎麼回事?我懷疑它與ForEach()和/或關閉有關。
你是對的。通過將集合更改爲ObservableCollection進行了測試,並且工作正常。儘管@Aron在他的回答中也有一點意義。 – prudentcoder