数据绑定枚举到ComboBox

时间:2011-01-21 16:45:22

标签: wpf

我正在尝试将ENUM绑定到组合框的项目中出现非常不寻常的错误。为了确保我没有编码错误,我使用SO Question 58743ageektrapped作为自包含用户控件的示例创建了一个新的用户控件。我使用.Net4 Client Framework作为环境和VS2010。 xaml是 -

<UserControl x:Class="Barcode.Views.UserControl1" 
             xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" 
             xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" 
             xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006" 
             xmlns:d="http://schemas.microsoft.com/expression/blend/2008" 
             xmlns:System="clr-namespace:System;assembly=mscorlib"  
             mc:Ignorable="d" d:DesignHeight="300" d:DesignWidth="300">

    <UserControl.Resources>
        <ObjectDataProvider MethodName="GetValues" 
                            ObjectType="{x:Type System:Enum}" 
                            x:Key="AlignmentValues">
            <ObjectDataProvider.MethodParameters>
                <x:Type TypeName="HorizontalAlignment" />
            </ObjectDataProvider.MethodParameters>
        </ObjectDataProvider>
    </UserControl.Resources>
    <Grid>
        <ComboBox Name="myComboBox" SelectedIndex="0" Margin="8" 
                  ItemsSource="{Binding Source={StaticResource AlignmentValues}}" />
    </Grid>
</UserControl>

我在ComboBox上遇到的错误是错误144在构建项目后,无法将类型为“System.String”的对象强制转换为“System.Windows.DataTemplate”

我不知道可能导致此错误的原因。

1 个答案:

答案 0 :(得分:1)

您可能会错过HorizontalAlignment上的命名空间。添加HorizontalAlignment类型所在的相关命名空间。

xmlns:local="clr-namespace:Barcode.Views"

然后修改您的XAML以使用新定义的命名空间...

...

<x:Type TypeName="local:HorizontalAlignment"/>

...

修改

这是框架内的HorizontalAlignment枚举类型,那么您的代码应该按原样运行。我测试它确定它确实有效;当我在我的窗口放置UserControl的一个实例时,它顺利运行。设置一个空项目并从头开始查看问题是否仍然存在,因为您可能有其他因素导致问题。