如何将自定义对象数据绑定到ComboBox

时间:2009-02-02 14:50:40

标签: wpf xaml data-binding combobox

我有自定义课程Contact

我正在尝试将List<Contact>绑定到ComboBox。

但是我无法为Windows.Resources部分获得正确的语法/命令,例如下面的代码给出错误“类型引用找不到名为'List'的公共类型”,我需要在Windows.Resources中修复什么才能使其生效?

XAML:

<Window x:Class="dpwpf.Window1"
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
    Title="Window1" Height="300" Width="300"
    xmlns:system="clr-namespace:System;assembly=mscorlib"
    xmlns:local="clr-namespace:dpwpf">

    <Window.Resources>
        <ObjectDataProvider
            x:Key="contacts"
            MethodName="GetContacts"
            ObjectType="{x:Type system:List}">
            <ObjectDataProvider.MethodParameters>
                <x:Type TypeName="local:GetContacts"/>
            </ObjectDataProvider.MethodParameters>
        </ObjectDataProvider>
    </Window.Resources>


    <StackPanel>
        <StackPanel>
            <TextBlock Text="Select the contact:"/>
            <ComboBox ItemsSource="{Binding
                Source={StaticResource contacts}}"/>
        </StackPanel>
    </StackPanel>
</Window>

课程背后的代码:

namespace dpwpf
{
    class StoreDB
    {
        private string connectionString = "App_Data/main.sqlite";

        public List<Contact> GetContacts()
        {
            SQLiteConnection conn = new SQLiteConnection("Data Source=" + connectionString);
            SQLiteCommand cmd = conn.CreateCommand();

            List<Contact> contacts = new List<Contact>();
            try
            {
                conn.Open();
                cmd.CommandText = String.Format("SELECT * FROM contacts");
                SQLiteDataReader reader = cmd.ExecuteReader();
                while (reader.Read())
                {
                    Contact contact = new Contact(
                        Int32.Parse(reader[0].ToString()),
                        reader[1].ToString(),
                        reader[2].ToString()
                    );
                    contacts.Add(contact);
                }
            }
            finally
            {
                conn.Close();
            }

            return contacts;
        }
    }
}

1 个答案:

答案 0 :(得分:2)

你的问题在这一行:

ObjectType="{x:Type system:List}"

这需要是定义GetContacts的对象。

window1.xaml.cs中,它看起来像这样:

ObjectType="{x:Type X:Window1}"