В Silverlight 4 у меня есть DataGrid, который связан с RIA DomainDataSource, все сделано в XAML. Свойство AutoGenerateColumns
имеет значение false
, и каждый столбец определяется и связывается вручную. В основном это работает нормально.
Там, где я сейчас сталкиваюсь с проблемами, есть дополнительный DataGridTextColumn
, который не имеет привязки. Я хочу вручную заполнить ячейки в этом столбце в коде позади. При наличии этого столбца без привязки во время выполнения появляется следующее исключение:
<sup>System.ArgumentNullException: Value cannot be null.
Parameter name: binding
at System.Windows.Data.BindingOperations.SetBinding(DependencyObject target, DependencyProperty dp, BindingBase binding)
at System.Windows.Controls.DataGridTextColumn.GenerateElement(DataGridCell cell, Object dataItem)
at System.Windows.Controls.DataGrid.PopulateCellContent(Boolean isCellEdited, DataGridColumn dataGridColumn, DataGridRow dataGridRow, DataGridCell dataGridCell)
at System.Windows.Controls.DataGrid.AddNewCellPrivate(DataGridRow row, DataGridColumn column)
at System.Windows.Controls.DataGrid.CompleteCellsCollection(DataGridRow dataGridRow)
at System.Windows.Controls.DataGrid.GenerateRow(Int32 rowIndex, Int32 slot, Object dataContext)
at System.Windows.Controls.DataGrid.AddSlots(Int32 totalSlots)
at System.Windows.Controls.DataGrid.RefreshRows(Boolean recycleRows, Boolean clearRows)
at System.Windows.Controls.DataGrid.RefreshRowsAndColumns(Boolean clearRows)
at System.Windows.Controls.DataGrid.InitializeElements(Boolean recycleRows)
at System.Windows.Controls.DataGridDataConnection.NotifyingDataSource_CollectionChanged(Object sender, NotifyCollectionChangedEventArgs e)
at System.Windows.Controls.DomainDataSourceView.OnCollectionChanged(NotifyCollectionChangedEventArgs e)
at System.Windows.Controls.DomainDataSourceView.OnCollectionViewCollectionChanged(Object sender, NotifyCollectionChangedEventArgs e)
at System.Windows.Controls.EntityCollectionView.OnCollectionChanged(NotifyCollectionChangedEventArgs args)
at System.Windows.Controls.PagedEntityCollectionView.OnCollectionChanged(NotifyCollectionChangedEventArgs args)
at System.Windows.Controls.PagedEntityCollectionView.RefreshView()
at System.Windows.Controls.PagedEntityCollectionView.SourceCollectionChanged(NotifyCollectionChangedEventArgs args)
at System.Windows.Controls.EntityCollectionView.HandleSourceCollectionChanged(Object sender, NotifyCollectionChangedEventArgs e)
at System.Windows.Controls.PagedEntityCollection.RaiseCollectionChanged(NotifyCollectionChangedAction action, Entity entity, Int32 index)
at System.Windows.Controls.PagedEntityCollection.CompleteLoad()
at System.Windows.Controls.DomainDataSource.ProcessLoadedEntities(LoadContext loadContext, IEnumerable`1 entities)
at System.Windows.Controls.DomainDataSource.DomainContext_Loaded(LoadedDataEventArgs e, LoadContext loadContext)</sup>
Как я могу избежать этого исключения и иметь мою DataGrid с большинством столбцов, связанных и один столбец без привязок?
Заранее спасибо.
Изменить:
Мой XAML выглядит следующим образом:
<sdk:DataGrid AutoGenerateColumns="False"
ItemsSource="{Binding Data, ElementName=MyDomainDataSource, Mode=OneWay}">
<sdk:DataGrid.Columns>
<sdk:DataGridTextColumn Binding="{Binding Name}" Header="Name" />
<sdk:DataGridTextColumn Binding="{Binding CreationDate}" Header="Creation Date" />
<sdk:DataGridTextColumn Header="Unbound Col" />
</sdk:DataGrid.Columns>
</sdk:DataGrid>
Редактировать # 2:
Одна идея, которую я нашел в Интернете, состояла в том, чтобы связать последний столбец с каким-то уникальным значением (у меня есть идентификатор в моей модели данных) и использовать пользовательский IValueConverter
, который преобразует идентификатор в зависимое значение. Это было бы именно то, что я хотел, но, к сожалению, я получаю зависимое значение от вызова службы WCF, который всегда асинхронный. Поскольку вы не можете использовать вызовы асинхронных методов в IValueConverter
, это решение не подходит для меня.