【发布时间】:2017-10-25 18:10:03
【问题描述】:
我有一个包含用户控件(每个都在单独的程序集中定义)的 Windows 窗体。窗体和用户控件都调用 BindingList 上的扩展方法。扩展方法在第三个程序集中定义。一切都编译并运行良好。
但是,如果我尝试在 Visual Studio 2017 设计器中打开表单,则会收到错误消息:
为防止在加载设计器之前可能丢失数据,必须解决以下错误:
找不到方法:'System.ComponentModel.BindingList
1 KamaTrenda.Utilities.Lists.ListUtilities.AddReset(System.ComponentModel.BindingList1, System.Collections.Generic.IEnumerable`1)'。
调用栈:
在 System.ComponentModel.ReflectPropertyDescriptor.SetValue(Object 组件,对象值)在 Microsoft.VisualStudio.Shell.Design.VsTargetFrameworkPropertyDescriptor.SetValue(对象 组件,对象值)在 System.ComponentModel.Design.Serialization.CodeDomSerializerBase.DeserializePropertyAssignStatement(IDesignerSerializationManager 经理,CodeAssignStatement 语句, CodePropertyReferenceExpression propertyReferenceEx, Boolean 报告错误)在 System.ComponentModel.Design.Serialization.CodeDomSerializerBase.DeserializeAssignStatement(IDesignerSerializationManager 经理,CodeAssignStatement 语句)在 System.ComponentModel.Design.Serialization.CodeDomSerializerBase.DeserializeStatement(IDesignerSerializationManager 经理,CodeStatement 语句)
注释掉这个属性的setter的内容允许在设计器中打开表单:
public IList<IPosition> PositionsToDisplay
{
get { return myPositionsToDisplay.Select(x => x.Position).ToList(); }
set { myPositionsToDisplay.AddReset(value.Select(x => new PositionAdapter(x))); }
}
myPositionsToDisplay:
private readonly BindingList<PositionAdapter> myPositionsToDisplay = new SortableBindingList<PositionAdapter>();
然后添加重置:
public static class ListUtilities
{
public static BindingList<T> AddReset<T>(this BindingList<T> list, IEnumerable<T> toAdd)
{
list.RaiseListChangedEvents = false;
foreach (T item in toAdd)
list.Add(item);
list.RaiseListChangedEvents = true;
list.ResetBindings();
return list; // for chaining
}
}
我已经尝试添加
[Browsable(false), DesignerSerializationVisibility(DesignerSerializationVisibility.Hidden)]
对PositionsToDisplay的定义,没有区别。
我尝试重建,手动删除所有 3 个项目的内容 obj 和 bin 目录,以及 AppData\Local\Microsoft\VisualStudio\15.0_6d397e1a\ProjectAssemblies 的内容,关闭 VS 2017 中所有打开的文档,关闭解决方案,然后重新启动 Visual Studio,它没有任何区别。
无论是表单还是控件的.resx文件都没有引用属性。
【问题讨论】:
标签: visual-studio-2017 windows-forms-designer