2012-06-15 36 views
8

Xin chào, tôi đang cố gắng gắn một Danh sách <> vào hộp tổ hợp.wpf combobox binding

<ComboBox Margin="131,242,275,33" x:Name="customer" Width="194" Height="25"/> 

public OfferEditPage() 
    { 
     InitializeComponent(); 
     cusmo = new CustomerViewModel(); 
     DataContext = this; 
     Cusco = cusmo.Customer.ToList<Customer>(); 
     customer.ItemsSource = Cusco; 
     customer.DisplayMemberPath = "name"; 
     customer.SelectedValuePath = "customerID"; 
     customer.SelectedValue = "1"; 
    } 

Tôi trở thành không có lỗi nhưng Combobox luôn trống. Cusco là tài sản của Danh sách của tôi. Tôi không biết có gì sai với mã này. Bạn có thể giúp tôi không?

Greets

public class Customer 
{ 
    public int customerID { get; set; } 
    public string name { get; set; } 
    public string surname { get; set; } 
    public string telnr { get; set; } 
    public string email { get; set; } 
    public string adress { get; set; } 
} 

đây là lớp khách hàng đó là mô hình của tôi.

public class CustomerViewModel 
{ 
    private ObservableCollection<Customer> _customer; 

    public ObservableCollection<Customer> Customer 
    { 
     get { return _customer; } 
     set { _customer = value; } 
    } 

    public CustomerViewModel() 
    { 
     GetCustomerCollection(); 
    } 

    private void GetCustomerCollection() 
    { 
     Customer = new ObservableCollection<Customer>(BusinessLayer.getCustomerDataSet()); 
    } 

} 

và đây là ViewModel.

+0

Bạn có thể đăng lớp 'Customer' không? –

+1

Bạn đã xác nhận rằng có thực sự một cái gì đó trong Danh sách mà bạn đang cung cấp cho ItemsSource (tại thời điểm nó được thiết lập, vì bạn không có thiết lập này như là một ràng buộc)? – Tim

Trả lời

23

Hãy thử thiết lập thuộc tính ItemsSource với một đối tượng Binding thực tế

XAML Phương pháp (đề nghị):

<ComboBox 
    ItemsSource="{Binding Customer}" 
    SelectedValue="{Binding someViewModelProperty}" 
    DisplayMemberPath="name" 
    SelectedValuePath="customerID"/> 

phương pháp lập trình:

Binding myBinding = new Binding("Name"); 
myBinding.Source = cusmo.Customer; // data source from your example 

customer.DisplayMemberPath = "name"; 
customer.SelectedValuePath = "customerID"; 
customer.SetBinding(ComboBox.ItemsSourceProperty, myBinding); 

Ngoài ra, các setter về sở hữu khách hàng của bạn nên tăng sự kiện PropertyChanged

public ObservableCollection<Customer> Customer 
{ 
    get { return _customer; } 
    set 
    { 
     _customer = value; 
     RaisePropertyChanged("Customer"); 
    } 
} 

Nếu phần trên không hoạt động, hãy thử di chuyển phần liên kết từ hàm tạo sang phương thức ghi đè được nạp sẵn. Khi trang tải, nó có thể đặt lại giá trị của bạn.

+1

ok tôi đã thử điều này. Nhưng combobox trống. Tôi cũng đã thử nó trong sự kiện PageLoaded. – Veeesss

3

Để mở rộng câu trả lời của Steve,

Bạn cần đặt datacontext của biểu mẫu.

Hiện nay bạn có điều này:

InitializeComponent(); 
cusmo = new CustomerViewModel(); 
DataContext = this; 

Nó nên được thay đổi như sau:

InitializeComponent(); 
cusmo = new CustomerViewModel(); 
DataContext = cusmo; 

Sau đó, như Steve lưu ý bạn sẽ cần một tài sản trên viewmodel để lưu trữ các mục đã chọn.