5

我见过很多其他 ObjectDataProvider 问题,其中参数名称:类型、名称等不能为空。这些问题都是由于没有设置实际参数。据我所知,ObjectDataProvider 没有“模式”参数。以下标记生成“值不能为空。参数名称:模式”,并带有随附的蓝色波浪线下划线。有时,设计器会抛出异常并且无法加载,但是按下重新加载按钮会加载页面。代码和标记按预期编译和运行。这是什么原因造成的?

<Page.Resources>
...
    <ObjectDataProvider ObjectType="{x:Type local:AutoFillBox}" MethodName="RecUpdateOutput" x:Key="odpOutput">
        <ObjectDataProvider.MethodParameters>
            <sys:String>08:00</sys:String>
            <sys:String>12:00</sys:String>
            <sys:String>13:00</sys:String>
            <sys:String>18:00</sys:String>
        </ObjectDataProvider.MethodParameters>
    </ObjectDataProvider>
</Page.Resources>

类的一部分,要注意这不是自定义控件,只是一个糟糕的命名选择:

    public partial class AutoFillBox
    {
        public AutoFillBox()
        { //default }

        public string RecUpdateOutput(string time1, string time2, string time3, string time4)
        {
            //do stuff
        }
    }

它是页面上唯一的 ObjectDataProvider,如果我删除第 4 个字符串参数,错误就会消失。此外,它调用的方法确实需要 4 个字符串,并返回一个字符串,因此我可以将其结果绑定到输出文本框。我在具有类似方法和签名的不同页面上使用了类似的 ObjectDataProvider,它也显示了相同的错误。这到底是怎么回事?

Visual Studio Ultimate 2013,Windows 7 Professional,面向 .net 4.5

4

1 回答 1

4

我不相信这是一个VS错误。尝试将属性 IsAsynchronous="True" 添加到 ObjectDataProvider,这应该可以消除设计器错误。该属性默认为 False,设计者将尝试在活动上下文中创建对象。这是链接:

对象数据提供者

为我工作。希望对你有效。

于 2014-06-29T00:55:04.190 回答