1

刪除一行時,我有一個Silverlight 4中(RIA 1.0),這是今天升級到Silverlight的5(RIA 1.0 SP2)錯誤Silverlight的5 DataGrid中

現在我得到當我試圖刪除下面的錯誤應用從DataGrid中記載:

 
at System.Windows.Controls.DataGrid.OnRemovedElement(Int32 slotDeleted, Object itemDeleted, Boolean isRow) 
at System.Windows.Controls.DataGrid.RemoveElementAt(Int32 slot, Object item, Boolean isRow) 
at System.Windows.Controls.DataGrid.RemoveRowAt(Int32 rowIndex, Object item) 
at System.Windows.Controls.DataGridDataConnection.NotifyingDataSource_CollectionChanged(Object sender, NotifyCollectionChangedEventArgs e) 
at System.Windows.Controls.DataGridDataConnection.<WireEvents>b__0(DataGridDataConnection instance, Object source, NotifyCollectionChangedEventArgs eventArgs) 
at System.Windows.Controls.WeakEventListener`3.OnEvent(TSource source, TEventArgs eventArgs) 
at System.Windows.Data.PagedCollectionView.OnCollectionChanged(NotifyCollectionChangedEventArgs args) 
at System.Windows.Data.PagedCollectionView.ProcessRemoveEvent(Object removedItem, Boolean isReplace) 
at System.Windows.Data.PagedCollectionView.ProcessCollectionChanged(NotifyCollectionChangedEventArgs args) 
at System.Windows.Data.PagedCollectionView.<.ctor>b__0(Object sender, NotifyCollectionChangedEventArgs args) 
at System.Collections.ObjectModel.ObservableCollection`1.OnCollectionChanged(NotifyCollectionChangedEventArgs e) 
at System.Collections.ObjectModel.ObservableCollection`1.RemoveItem(Int32 index) 
at System.Collections.ObjectModel.Collection`1.Remove(T item) 
at Allscripts.UECPortal.Client.Modules.PayerpathEnrollmentProfile.ViewModels.CompleteUserInformation.CompleteUserInformationViewModel.deleteUserCommandExcuted(Object parameter) 
at Microsoft.Practices.Prism.Commands.DelegateCommand`1.<>c__DisplayClass6.<.ctor>b__2(Object o) 
at Microsoft.Practices.Prism.Commands.DelegateCommandBase.Execute(Object parameter) 
at Microsoft.Practices.Prism.Commands.DelegateCommandBase.System.Windows.Input.ICommand.Execute(Object parameter) 
at System.Windows.Controls.Primitives.ButtonBase.ExecuteCommand() 
at System.Windows.Controls.Primitives.ButtonBase.OnClick() 
at System.Windows.Controls.Primitives.ToggleButton.OnClick() 
at System.Windows.Controls.Primitives.ButtonBase.OnMouseLeftButtonUp(MouseButtonEventArgs e) 
at System.Windows.Controls.Control.OnMouseLeftButtonUp(Control ctrl, EventArgs e) 
at MS.Internal.JoltHelper.FireEvent(IntPtr unmanagedObj, IntPtr unmanagedObjArgs, Int32 argsTypeIndex, Int32 actualArgsTypeIndex, String eventName, UInt32 flags) 

我有DomainContext.EntitySet裹成這勢必DataGrid中的ObservableCollection,所以當我試圖從的ObservableCollection刪除項目我得到這個錯誤。

此外,我試圖將EntitySet直接綁定到datagrid,並從EntitySet中刪除項目,我仍然得到相同的錯誤。

+0

你會得到什麼異常信息?你給了我們一個堆棧跟蹤,但堆棧跟蹤頂部的例外(例如NullReferenceException,ArgumentException等)以及它包含的消息是什麼? –

+0

我得到System.NullReferenceException:對象引用未設置爲對象的實例。 –

回答

1

我已解決問題。

問題是以下幾點: - 我們的DataGrid具有自定義模板 - 我們的模板是沒有VerticalScrollbar [TemplatePartAttribute(NAME = 「VerticalScrollbar」,類型= typeof運算(滾動條))]

在行刪除DataGrid的嘗試重新計算高度。這個過程涉及VerticalScrollbar(甚至認爲它應該是不可見的)。只要我沒有在模板中滾動條,我得到NullReferenceException。 我將VerticalScrollbar添加到datagrid模板,並解決了問題。

在Silverlight 4中,一切正常。所以我有一個問題:這是Silverlight 5數據網格缺陷嗎?或者我應該始終在自定義模板中定義所有模板部件?

+0

非常感謝,修復工作。 – Vaibhav

2

通常,您應該始終爲自定義模板中的所有[TemplatePart]定義控件,除非控件的文檔說明您不必。這些[TemplatePart]屬性的意圖是記錄控件可能引用的代碼部分。如果控件發現其模板缺少重要部分,則應該拋出異常。很顯然,Silverlight 5 Toolkit中的DataGrid不會這樣做 - 也許微軟打算在沒有垂直滾動條的情況下使用它?

Silverlight 5 DataGrid類有一個字段_vScrollBar,它存儲從控件的模板中讀取的垂直滾動條(如果模板中有一個)。在OnRemovedElement方法中,我能夠看到代碼讀取_vScrollBar.Maximum屬性,而沒有首先檢查_vScrollBar是否爲空。我懷疑這是你看到的NullReferenceException被拋出的地方。我會說這是Silverlight 5 DataGrid中的一個錯誤:DataGrid應該抱怨模板中沒有垂直滾動條,或者應該沒有。

+0

感謝您的確切解釋。希望有人將此文件記錄爲Connect問題。 – Vaibhav