将现有对象实例作为构造函数参数传递给WPF中的ObjectDataProvider

时间:2011-01-20 17:25:20

标签: wpf xaml

我正在尝试将现有对象实例作为参数传递给使用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; }            
}

1 个答案:

答案 0 :(得分:0)

您无法通过ObjectDataProvider传递ConstructorParameters。原因为Dr. WPF adequately states ...

  

ObjectDataProvider(ODP)是   旨在与绑定一起使用。   如果您在上下文之外使用它   一个绑定,你最终引用   ODP的一个实例而不是   它被解除引用的对象   “提供”。

你试图做一些框架不允许的设计。