I have a custom class Contact.
I am trying to bind a List<Contact> to a ComboBox.
But I can’t get the right syntax/commands for the Windows.Resources part, e.g. the code below gives the error ‘The type reference cannot find a public type named ‘List”, what do I need to fix in Windows.Resources to get this to work?
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>
Code behind class:
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; } } }
Your problem is in this line:
This needs to be the object in which
GetContactsis defined.In your
window1.xaml.csit would looks something like this: