2015-01-23 3 views
0

Я знаю, что это общий вопрос, но, насколько я могу видеть из других сообщений, я делаю все правильно ... очевидно, что нет.Почему мой WPF CompboBox Пустой

Мой C# в код

 InitializeComponent(); 
     cboCustomerIds.DataContext = new Customers(); 

Мой C# в бизнес-объектов Tier

namespace BusinessObjects 
{ 
public class Customers 
{ 
    public class Customer 
    { 
     public Int64 CustomerId { get; set; } 
    } 

    public List<int> CustomerIds { get; set; } 

    public Customers() 
    { 
     DataLayer dl = new DataLayer(); 
     SqlDataReader reader = dl.GetSqlDataReader("GetCustomerIds"); 
     List<Int64> CustomerIds = new List<Int64>(); 
     try 
     { 
      if (reader.HasRows) 
      { 
       do 
       { 
        Int64 thing = 0; 
        thing = (Int64)reader["CustomerId"]; 
        CustomerIds.Add(thing); 
        int count = CustomerIds.Count; 
        Int64 id = CustomerIds[count-1]; 
       } 
       while (reader.Read()); 
      } 
     } 
     catch 
     { 
      throw; 
     } 
     finally 
     { 
      reader.Close(); 
     } 
    } 
} 
} 

C# делает подсчет CustomerIds таким образом я могу bebug и подтвердить детали возвращаются из базы данных и добавлены в список. Мой XAML

<Grid> 
    <ComboBox x:Name="cboCustomerIds" ItemsSource="{Binding CustomerIds}" DisplayMemberPath="CustomerId" Width="120"> 
    </ComboBox> 
</Grid> 

Он строит без ошибок и работает. Он вызывает конструктор Customers и строит список CustomerIds, но cboCustomerIds отображает пустой список.

+1

Попробуйте удалить 'DisplayMemberPath' атрибут на ComboBox. – Gjeltema

+0

Спасибо @Gjeltema, но я только добавил DisplayMemberPath после того, как он не работал без него. –

ответ

1

Внимательно проверьте ваш код, на этот код никогда не ссылаются.

public class Customer 
    { 
     public Int64 CustomerId { get; set; } 
    } 

    public List<int> CustomerIds { get; set; } 

Читаешь данные из БД и добавить их в

List<Int64> CustomerIds = new List<Int64>();

не в

public List<int> CustomerIds { get; set; }

но ComboBox связывание с public List<int> CustomerIds { get; set; }

так все выглядит ул Анж.

Вот пример:

public class Customers 
{ 


    public List<int> CustomerIds { get; set; } 

    public Customers() 
    { 

     CustomerIds = new List<int>(); 
     for (int i = 1; i < 10; i++) 
     { 
      CustomerIds.Add(i); 
     } 
    } 


} 

и вы должны удалить DisplayMemberPath сначала.

Я предполагаю, что ваш спрос:

public partial class MainWindow : Window 
{ 
    public MainWindow() 
    { 
     InitializeComponent(); 
     cboCustomerIds.DataContext = new Customers(); 
    } 
} 

/// <summary> 
/// ViewModel 
/// </summary> 
public class Customers 
{ 
    public List<Customer> LstCustomer { get; set; } 

    public Customers() 
    { 
     LstCustomer = new List<Customer>(); 

     //get data from DB, here is an example 
     for (int i = 1; i < 10; i++) 
     { 
      Customer c = new Customer(); 
      c.CustomerId = i; 
      c.CustomerName = "name" + i; 
      c.CustomerAge = 10 + i; 

      LstCustomer.Add(c); 
     } 
    } 


} 

/// <summary> 
/// Model 
/// </summary> 
public class Customer 
{ 
    public int CustomerId { get; set; } 
    public string CustomerName { get; set; } 
    public int CustomerAge { get; set; } 
} 

и View:

<ComboBox x:Name="cboCustomerIds" ItemsSource="{Binding LstCustomer}" DisplayMemberPath="CustomerId" /> 
+0

Спасибо @Rang. Это решение работало, как только я правильно ссылался на список. –

+0

@FSL_AU :) Удачи. – Rang