为什么我在这个数据绑定上得到“类型引用无法找到公共类型”?

时间:2009-04-27 11:18:54

标签: c# wpf data-binding

为什么在此示例中 ObjectDataProvider不会识别“local:customer”

当我输入

<local:

我得到了“客户”的智能感知,所以它应该有效。在这个例子中我没有代码隐藏。

XAML:

<Window x:Class="TestDataTemplate124.Window1"
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
    xmlns:local="clr-namespace:TestDataTemplate124"
    Title="Window1" Height="300" Width="300">
    <Window.Resources>
        <ObjectDataProvider x:Key="Customers"
                            ObjectType="x:Type local:Customer"
                            MethodName="GetAllCustomers"/>
    </Window.Resources>
    <StackPanel>
        <ListBox DataContext="{StaticResource Customers}" ItemsSource="{Binding}">
            <ListBox.ItemTemplate>
                <DataTemplate>
                    <StackPanel Orientation="Horizontal">
                        <TextBlock Text="{Binding FirstName}"/>
                        <TextBlock Text=" "/>
                        <TextBlock Text="{Binding LastName}"/>
                        <TextBlock Text=" ("/>
                        <TextBlock Text="{Binding Age}"/>
                        <TextBlock Text=")"/>
                    </StackPanel>
                </DataTemplate>
            </ListBox.ItemTemplate>
        </ListBox>
    </StackPanel>
</Window>

Customer.cs:

using System.Collections.ObjectModel;

namespace TestDataTemplate124
{
    public class Customer
    {
        public string FirstName { get; set; }
        public string LastName { get; set; }
        public int Age { get; set; }

        public static ObservableCollection<Customer> GetAllCustomers()
        {
            ObservableCollection<Customer> customers = new ObservableCollection<Customer>();
            customers.Add(new Customer() { FirstName = "Jim", LastName = "Smith", Age = 23 });
            customers.Add(new Customer() { FirstName = "John", LastName = "Jones", Age = 22 });
            customers.Add(new Customer() { FirstName = "Jay", LastName = "Anders", Age = 21 });
            return customers;
        }
    }
}

2 个答案:

答案 0 :(得分:1)

“x:Type”是标记扩展名,因此请将其括在花括号中:

ObjectType="{x:Type local:Customer}"

答案 1 :(得分:0)

尝试添加名称空间作为类的前缀。