Как привязать данные пользовательских объектов к ComboBox - PullRequest
0 голосов
/ 02 февраля 2009

У меня есть пользовательский класс Contact.

Я пытаюсь привязать List<Contact> к ComboBox.

Но я не могу получить правильный синтаксис / команды для части Windows.Resources, например код ниже выдает ошибку «Ссылка на тип не может найти открытый тип с именем« Список »», что мне нужно исправить в 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 Ответ

2 голосов
/ 02 февраля 2009

Ваша проблема в этой строке:

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

Это должен быть объект, в котором определено GetContacts.

В вашем window1.xaml.cs это будет выглядеть примерно так:

ObjectType="{x:Type X:Window1}"
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...