2009-02-02 2 views
0

У меня есть пользовательский класс Contact.Как связать данные пользовательских объектов с ComboBox

Я пытаюсь связать 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; 
     } 
    } 
} 

ответ

2

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

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

Это должен быть объект, в котором GetContacts является defi Нед.

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

ObjectType="{x:Type X:Window1}" 
Смежные вопросы