调试程序时出现异常。
抛出异常:' System.MissingMethodException'在mscorlib.dll中 System.Globalization.CultureInfo
"类型' System.Globalization.CultureInfo'上的构造函数没找到。"
在我的
xmlns:global="clr-namespace:System.Globalization;assembly=mscorlib"
xmlns:scm="clr-namespace:System.ComponentModel;assembly=WindowsBase"
xmlns:dat="clr-namespace:System.Windows.Data;assembly=PresentationFramework"
>
<Window.Resources>
<ObjectDataProvider x:Key="CulturesProvider"
ObjectType="{x:Type global:CultureInfo}"
MethodName="GetCultures">
<ObjectDataProvider.MethodParameters>
<global:CultureTypes>AllCultures</global:CultureTypes>
</ObjectDataProvider.MethodParameters>
</ObjectDataProvider>
<CollectionViewSource x:Key="MyCVS"
Source="{StaticResource CulturesProvider}">
<CollectionViewSource.SortDescriptions>
<scm:SortDescription PropertyName="IetfLanguageTag" />
</CollectionViewSource.SortDescriptions>
<CollectionViewSource.GroupDescriptions>
<dat:PropertyGroupDescription PropertyName="Parent" />
</CollectionViewSource.GroupDescriptions>
</CollectionViewSource>
我是否需要导入任何引用才能使其正常工作?
答案 0 :(得分:2)
您发布的代码运行正常,我尝试将其绑定到ListBox
,并且正确显示了不同的文化。
虽然我注意到您在“输出”窗口中描述的异常,但我开始调查。
Here您可以找到ObjectDataProvider
的源代码。我链接到了我们真正感兴趣的部分。
在这里,您可以看到代码实际上会尝试创建您提供的ObjectType
实例,即使您只是尝试在该类型上调用静态方法。这将因上述异常而失败,因为CultureInfo
没有一个取零参数的构造函数。
评论here中甚至提到了这一点:
// if InvokeMethod failed, we prefer to surface the instantiation error, if any.
// (although this can be confusing if the user wanted to call a static method)
我还找到了this forum post,其中对同一问题的接受答案如下:
如果您的应用程序运行良好,则可以忽略输出。此输出用于调试数据绑定错误。但是,通常即使您的代码运行良好,也可能会出现输出,因此您可以忽略它。
所以我说你可以忽略这个错误,如果你的应用程序有效并且我测试它,它应该可以工作。
所有这一切,如果您对异常感到非常恼火,可以通过执行以下操作来修复它:
xmlns:sys="clr-namespace:System;assembly=mscorlib"
>
<Window.Resources>
<ObjectDataProvider x:Key="CulturesProvider" ObjectType="{x:Type global:CultureInfo}" MethodName="GetCultures">
<ObjectDataProvider.ConstructorParameters>
<x:Static Member="sys:String.Empty" />
</ObjectDataProvider.ConstructorParameters>
<ObjectDataProvider.MethodParameters>
<global:CultureTypes>AllCultures</global:CultureTypes>
</ObjectDataProvider.MethodParameters>
</ObjectDataProvider>
这不会引发异常,因为在CultureInfo
代码中创建ObjectDataProvider
的实例将会成功。它将使用带有一个string
参数的构造函数。