【问题标题】:Passing existing object instances as constructor parameters to the ObjectDataProvider in WPF将现有对象实例作为构造函数参数传递给 WPF 中的 ObjectDataProvider
【发布时间】:2011-01-20 17:25:20
【问题描述】:

我正在尝试将现有对象实例作为参数传递给使用 ObjectDatatProvider 创建的对象的构造函数。即使我的对象有一个带有一个参数的构造函数,这总是会失败并出现给定的异常:

System.Windows.Data 错误:34: ObjectDataProvider 无法创建 目的;类型='VegaViewModel'; Error='错误的参数 构造函数。 MissingMethodException:'System.MissingMethodException: 类型的构造函数 'WpfApplication1.VegaViewModel' 不是 成立。在 System.RuntimeType.CreateInstanceImpl(BindingFlags bindingAttr,活页夹活页夹,对象[] 参数,CultureInfo 文化,对象 [] 激活属性)在 System.Activator.CreateInstance(类型 类型、BindingFlags bindingAttr、Binder 活页夹,对象 [] 参数,CultureInfo 文化,对象[] 激活属性)在 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; }            
}

【问题讨论】:

  • 你为什么要这样做?

标签: wpf xaml


【解决方案1】:

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

ObjectDataProvider (ODP) 是 设计用于绑定。 如果您在上下文之外使用它 的绑定,你最终指的是 ODP 的一个实例,而不是 它被取消引用的对象 “提供”。

您试图做一些框架设计不允许的事情。

【讨论】:

  • 那么我如何绑定到方法的结果并将其用作构造函数的参数?
  • 如果我执行以下操作,我仍然会遇到同样的异常:
  • @user583337 在当前的实现中你不能这样做。查看我发布的链接,因为 WPF 博士提供了适合您的替代方案。老实说,将所有这些都推入 XAML 本身就有点奇怪……但假设您有正当理由这样做。
  • 如何将窗口/用户控件对象作为参数传递给构造函数参数。我希望我的窗口的数据对象具有对窗口对象的引用。
猜你喜欢
  • 2013-12-12
  • 1970-01-01
  • 1970-01-01
  • 2019-09-29
  • 2014-02-14
  • 2012-11-14
  • 1970-01-01
  • 2012-07-09
  • 1970-01-01
相关资源
最近更新 更多