麻煩我遇到了將DataGrid的ItemsSource屬性設置爲LINQ查詢結果的問題。確切的錯誤是:延期評估和DataGrid.ItemsSource
無法訪問處置的對象。 對象名稱:'在Dispose之後訪問DataContext'。
現在,在您開始sn鼻涕,甩開關於延遲查詢評估和處置數據庫上下文的答案之前,請確定我明白了所有這些。我正在調用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>
當數據綁定訪問相關對象上的屬性時(如引用了OrderType對象的訂單對象),惰性加載正在踢入,並且新查詢正在觸發 – 2011-02-15 05:00:29