Возникла проблема с установкой свойства ItemsSource DataGrid в результате запроса LINQ.Точная ошибка:
Невозможно получить доступ к удаленному объекту.Имя объекта: 'DataContext, доступ к которому осуществляется после Dispose.'.
Теперь, прежде чем вы начнете смешивать и получать ответ относительно отложенной оценки запроса и удаления контекстов вашей базы данных, знайте, что я все это понимаю,Я вызываю ToList () в результате запроса и присваиваю его свойству ItemsSource.Итак, запрос выполнен, результаты считаны в память, должно быть в порядке.
Да, не так уж и много.Сначала я подумал, что должно быть что-то в самом свойстве, вызывающем это, то есть какая-то странная вещь, связанная с привязкой данных, о которой я не знаю (изучая WPF и linq2Sql в данный момент).Подумав еще немного об этом, я все еще не мог объяснить проблему, так как DataGrid не должен иметь никакого представления о DataContext, а только о списке (хотя возвращение List из тестового метода и повторение его позже не вызывает исключения).
Это был DataContext, к которому обращались после его уничтожения, но это также не помогает мне понять, потому что я вызываю ToList () специально для выполнения запроса перед выходом из блока using.Однако я могу решить проблему, как показано ниже:
private void button1_Click( object sender, RoutedEventArgs e )
{
using( NorthwindDataContext db = new NorthwindDataContext() )
{
db.DeferredLoadingEnabled = false; // works, but why is it necessary at all?
grid.ItemsSource = (from o in db.Orders
where o.CustomerID == "VINET"
select o).ToList();
}
}
Так что да, я хотел бы понять это поведение, прежде чем идти слишком далеко.Заранее спасибо.
РЕДАКТИРОВАТЬ: xaml для главного окна и DataGrid
<Window x:Class="WpfApplication1.MainWindow"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
Title="MainWindow" Height="495" Width="722">
<Grid>
<DataGrid AutoGenerateColumns="true" Height="403" HorizontalAlignment="Left" Margin="12,41,0,0" Name="grid" VerticalAlignment="Top" Width="676" />
<Button Content="Do it" Height="23" HorizontalAlignment="Left" Margin="12,12,0,0" Name="button1" VerticalAlignment="Top" Width="75" Click="button1_Click" />
</Grid>
</Window>