Проблема с отложенной оценкой и DataGrid.ItemsSource - PullRequest
1 голос
/ 15 февраля 2011

Возникла проблема с установкой свойства 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>

1 Ответ

0 голосов
/ 15 февраля 2011

Ваш код указывает, что установка DeferredLoadingEnabled в false исправила это?Если это так, я предполагаю, что ваша привязка данных имела доступ к свойствам связанного объекта, который при обращении пытался запустить новый запрос для получения указанного объекта.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...