我將我的private List<MaintenanceWindow> tempMaintenanceWindows
綁定到Datagrid並使用戶能夠編輯Datagrid中的項目以及添加新項目。這工作正常。C#WPF比較列表<T>到Datagrid.ItemsSource
現在我想了解如何在沒有首先按下保存按鈕的情況下關閉窗口來回滾用戶所做的更改。基本上,我想給Datagrid.ItemsSource比較臨時列表我填充像這樣:
foreach (MaintenanceWindow mainWin in maintenanceWindowList)
tempMaintenanceWindows.Add(new MaintenanceWindow {from = mainWin.from, to = mainWin.to, abbreviation = mainWin.abbreviation, description = mainWin.description, hosts = mainWin.hosts });
我比較兩個像這樣:
if (!tempMaintenanceWindows.SequenceEqual((List<MaintenanceWindow>)mainWinList.ItemsSource))
但SequenceEqual的結果似乎總是假,雖然在調試代碼時,它們似乎是完全相同的東西。
希望有人能幫忙。謝謝。
昆汀·羅傑所提供的方法解決方案,它的工作原理,但我想我張貼代碼很可能不是做最巧妙的方法,但它適合我的應用程序的情況下。
所以這就是我不顧我的MaintenanceWindow對象的Equals方法:
public override bool Equals (object obj)
{
MaintenanceWindow item = obj as MaintenanceWindow;
if (!item.from.Equals(this.from))
return false;
if (!item.to.Equals(this.to))
return false;
if (!item.description.Equals(this.description))
return false;
if (!item.abbreviation.Equals(this.abbreviation))
return false;
if (item.hosts != null)
{
if (!item.hosts.Equals(this.hosts))
return false;
}
else
{
if (this.hosts != null)
return false;
}
return true;
}
SequenceEqual使用默認比較器,您是否覆蓋了MaintenanceWindow的等號? –
默認比較器,是否意味着它比較像tempElement1.Equals(gridElement1)等?不,我沒有覆蓋它。所以在覆蓋方法中,我必須比較我的MaintenanceWindow類的每個字段嗎? – jera
正是你必須比較每個重要的領域。 –