我需要将一个嵌套类传递给另一个具有如下构造函数的<div class="image-holder">
<div class="offer-image offer-1">
<div class="overlay-black"></div>
<h2 class="offer-image-title">Chuck Norris</h2>
</div>
</div>
:
ViewModel
我从中获取数据的类是 public CityEditViewModel(CityListViewModel.CityInfo info)
{
Model = Library.CityEdit.GetItem(info.Model.CityID);
}
,其中是一个嵌套的类CityListViewModel
。
详情。
我有一个CityInfo
,其项目类型为datagrid
。好吧,当我从CityInfo
中选择该项时,它应该打开datagrid
的新ViewModel
(它应该将该类发送到我上面的构造函数)。
我试过以下:
CitiyEditViewModel
但是我得到的方法不存在异常。
答案 0 :(得分:0)
在这一行中,您尝试调用构造函数CityEditViewModel(CityEditViewModel.CityInfo)
:
IScreen screen = (IScreen)(Activator.CreateInstance(EditClass,
editConstructor ));
That overload of CreateInstance
需要一个或多个参数。第一个是要构造的类的Type
。第二个和后续参数是您希望它传递给构造函数的参数。它使用反射来查找按该顺序匹配该组参数的构造函数。如果找到一个,则调用它来创建该类型的实例。
您正在传递类型ConstructorInfo
的构造函数参数。 CityEditViewModel
没有带有该类型参数的构造函数。那种方法不存在。因此例外。我收到System.MissingMethodException
消息"Constructor on type 'CityEditViewModel' not found."
。如果它表明找不到某些特定的构造函数,那么该消息会更好,但我看到的情况更糟。
改为传递CityEditViewModel.CityInfo
:
var cityInfo = whateverThingUserClickedOn as CityEditViewModel.CityInfo;
IScreen screen = (IScreen)(Activator.CreateInstance(EditClass,
cityInfo ));
但是演员表是为了你的利益而不是Activator.CreateInstance()
。构造函数参数为object
,因此不需要强制转换:
IScreen screen = (IScreen)(Activator.CreateInstance(EditClass,
whateverThingUserClickedOn ));
删除下一行;你不需要它。 Activator.CreateInstance()
根据您提供的参数类型为您找到构造函数。
ConstructorInfo editConstructor = EditClass.GetConstructor(
new Type[] { ChildClass }); // getting the constructor of that class