c#:如何传递linq-objects

Veg*_*gar 5 c# wpf datacontext linq-to-sql

在显示我的主窗口时,我从linq-to-sql中创建了一个对象列表:

 using (var context = new Data.TVShowDataContext())
 {
    Shows = new ObservableCollection<Data.Show>(context.Shows);
    listShows.ItemsSource = Shows;
 }
Run Code Online (Sandbox Code Playgroud)

现在,当我双击列表中的项目时,我想在新的usercontrol中使用所选对象:

 ShowEpList epList = new ShowEpList();
 epList.DataContext = (Data.Show)listShows.SelectedItem;
Run Code Online (Sandbox Code Playgroud)

现在,这会导致异常:

System.ObjectDisposedException未处理
Message ="无法访问已处置的对象.\ r \n对象名称:'Dispose后访问的DataContext'."
Source ="System.Data.Linq"
ObjectName ="Dispose后访问的DataContext".

我想这是因为将列表绑定到节目季节列表,并且需要填充季节列表或者其他内容:

<ListBox Name="listSeasons" ItemsSource="{Binding Seasons}"/>
Run Code Online (Sandbox Code Playgroud)

现在,我想知道的是,这应该怎么做?我是否需要创建一个新的DataContext对象并再次检索所选的节目,或者是否可以使用新的datacontext重新连接我的节目以填充季节列表?

我想我有点失落了....

Jos*_*lio 10

不要在datacontext中使用"using"语句.请参阅这篇文章:处理DataContext

  • 我认为这是使用datacontexts的方式 - 创建,使用和处置.我想我错了.. :)谢谢. (3认同)

Ada*_*son 5

当你使用一个using()块时,它会调用Dispose()你放入初始化程序的任何东西(在这种情况下,你的上下文).当处置LINQ to SQL上下文时,使用它创建的实体也是如此.我建议在你Form的上下文中创建一个实例变量,并将代码插入你的Form Dispose(bool)函数(它在Designer.cs文件中)来处理上下文.