У меня есть DataGrid, который связан с PagedCollectionView, и базовая коллекция может не содержать элементов. Когда это происходит, DataGrid не визуализируется вообще, без заголовков столбцов или чего-либо, и когда DataGrid затем повторно привязывается к другому PagedCollectionView, который содержит некоторые элементы, это вызывает системную ошибку
System.ArgumentException: значение делает
не попадает в ожидаемый диапазон.
в
MS.Internal.XcpImports.MethodEx (IntPtr
ptr, строковое имя, CValue [] cvData)
в
MS.Internal.XcpImports.MethodEx (DependencyObject
obj, строковое имя) в
MS.Internal.XcpImports.UIElement_UpdateLayout (UIElement
элемент) ...
или
Сообщение: необработанная ошибка в приложении Silverlight
Код: 4004
Категория: ManagedRuntimeError
Сообщение: System.ArgumentException: значение не попадает в ожидаемый диапазон.
в MS.Internal.XcpImports.CheckHResult (UInt32 ч)
в MS.Internal.XcpImports.Collection_InsertValue [T] (коллекция PresentationFrameworkCollection 1, индекс UInt32, значение CValue)
в MS.Internal.XcpImports.Collection_InsertDependencyObject [T] (коллекция PresentationFrameworkCollection 1, индекс UInt32, значение DependencyObject)
в System.Windows.PresentationFrameworkCollection 1.InsertDependencyObject (индекс Int32, значение DependencyObject)
в System.Windows.Controls.UIElementCollection.InsertInternal (индекс Int32, значение UIElement)
в System.Windows.PresentationFrameworkCollection 1.Insert (индекс Int32, значение T)
в System.Windows.Controls.DataGrid.InsertDisplayedColumnHeader (DataGridColumn dataGridColumn)
в System.Windows.Controls.DataGrid.OnInsertedColumn_PreNotification (DataGridColumn InsertColumn)
в System.Windows.Controls.DataGridColumnCollection.InsertItem (Int32 columnIndex, DataGridColumn dataGridColumn)
at System.Collections.ObjectModel.Collection 1.Insert (индекс Int32, элемент T)
at System.Windows.Controls.DataGridColumnCollection.EnsureRowGrouping (Boolean rowGrouping)
в System.Windows.Controls.DataGrid.EnsureRowGroupSpacerColumn ()
в System.Windows.Controls.DataGrid.RefreshRows (логическое recycleRows, логическое clearRows)
at System.Windows.Controls.DataGrid.RefreshRowsAndColumns (Boolean clearRows)
at System.Windows.Controls.DataGrid.MeasureOverride (Size availableSize)
в System.Windows.FrameworkElement.MeasureOverride (IntPtr nativeTarget, одинарный inWidth, одинарный inHeight, одиночный и внешний, одиночный и внешний)
Линия: 54
Char: 13
Код: 0
, что, как я полагаю, вызвано тем, что в DataGrid отсутствует указатель, который должен иметь (но, если честно, я действительно понятия не имею, поскольку я не изучал его).
Системное исключение, очевидно, является проблемой, и я бы хотел, чтобы этого не произошло. Но сделать пользовательский интерфейс красивым, когда в коллекции нет элементов, является бизнес-требованием, и я полагаю, что исправление пользовательского интерфейса для отображения чего-то приятного, когда коллекция пуста, может просто дать мне обходной путь для исключения системы.
Так возможно ли отобразить сообщение или строку по умолчанию в сетке данных Silverlight 3?
Я видел Ответ Джонатана Шена , но мне было интересно, есть ли более простой / простой / встроенный способ в наши дни, так как его ответ предшествовал Silverlight 3. У меня также есть проблема с View в этом примере необходимо создать коллекцию Person и объект. Мои представления не имеют представления о ViewModel, поэтому для реализации решения Джонатана мне также нужно было бы внедрить в View вторичное лицо - не конец света, но это кажется немного хакерским.
У кого-нибудь есть лучшее решение для отображения чего-то приятного при связывании потенциально пустой коллекции с сеткой данных Silverlight?