我正在尝试将现有对象实例作为参数传递给使用ObjectDatatProvider创建的对象的构造函数。这总是因给定的异常而失败,即使我的对象有一个带有一个参数的构造函数:
System.Windows.Data错误:34: ObjectDataProvider无法创建 宾语;类型= 'VegaViewModel'; 错误='错误的参数 构造函数“。 MissingMethodException:“system.missingMethodException而: 类型的构造函数 'WpfApplication1.VegaViewModel'没有 找到。在 System.RuntimeType.CreateInstanceImpl(的BindingFlags bindingAttr,Binder binder,Object [] args,CultureInfo culture,Object [] activationAttributes)at System.Activator.CreateInstance(类型 type,BindingFlags bindingAttr,Binder binder,Object [] args,CultureInfo 文化,对象[] activationAttributes)at System.Windows.Data.ObjectDataProvider.CreateObjectInstance(例外&安培; E)'
这是我的Xaml:
<ObjectDataProvider ObjectType="{x:Type WpfApplication1:VegaModel}" MethodName="Sample" x:Key="VegaPnlData"/>
<ObjectDataProvider ObjectType="{x:Type WpfApplication1:VegaViewModel}" x:Key="VegaViewModel">
<ObjectDataProvider.ConstructorParameters>
<ObjectDataProvider ObjectInstance="{StaticResource VegaPnlData}"/>
</ObjectDataProvider.ConstructorParameters>
</ObjectDataProvider>
如果我使用这个xaml,我也会得到同样的错误:
<ObjectDataProvider ObjectType="{x:Type WpfApplication1:VegaViewModel}" x:Key="VegaViewModel">
<ObjectDataProvider.ConstructorParameters>
<StaticResource ResourceKey="VegaPnlData"/>
</ObjectDataProvider.ConstructorParameters>
</ObjectDataProvider>
以下是VegaViewModel类的代码:
public class VegaViewModel
{
public VegaViewModel(VegaModel vegaPnl)
{
VegaPnl = vegaPnl;
}
public VegaModel VegaPnl { get; set; }
}
答案 0 :(得分:0)
您无法通过ObjectDataProvider
传递ConstructorParameters
。原因为Dr. WPF adequately states ...
ObjectDataProvider(ODP)是 旨在与绑定一起使用。 如果您在上下文之外使用它 一个绑定,你最终引用 ODP的一个实例而不是 它被解除引用的对象 “提供”。
你试图做一些框架不允许的设计。