WPF:在UserControl的构造函数中加载数据会破坏Designer

Veg*_*gar 7 c# wpf user-controls constructor

我有一个带有usercontrol的主窗口.在usercontrol的默认构造函数中添加代码时,设计器停止显示主窗口.它给出了一个信息:

加载问题

该文档包含必须在加载设计器之前修复的错误.
修复错误后重新加载设计器.

重新加载设计师

为什么是这样?

这是我在构造函数中的代码:

using (var context = new Data.TVShowDataContext())
{
    var list = from show in context.Shows
               select show;

    listShow.ItemsSource = list;
}
Run Code Online (Sandbox Code Playgroud)

如果我不能使用构造函数来填充gui数据,我应该什么时候做呢?用绑定做这个会更好吗?任何sugestions怎么样?

Bad*_*yon 13

WPF设计器将在显示子元素时执行构造函数.我的猜测是你在构造函数中有代码在设计时抛出异常,可能是因为它使用了一个只在运行时可用的对象.解决方案是使用检查来围绕构造函数逻辑,以防止它在设计器中显示时执行.

if (!System.ComponentModel.DesignerProperties.GetIsInDesignMode(this))
{
  using (var context = new Data.TVShowDataContext())
  {
    var list = from show in context.Shows
               select show;

    listShow.ItemsSource = list;
  }    
}
Run Code Online (Sandbox Code Playgroud)