2014-10-20 2 views
0

C#을 사용하여 WPF 응용 프로그램을 만들고 있습니다. 콤보 상자 안에 List<Customer>의 항목을로드하려고합니다. 다음을 수행했습니다.WPF - 콤보 상자 항목에 연결된 문자열 표시

고객 콤보 상자의 이름을 표시 할 수있었습니다. 그러나 고객의 이름과 성을 조합하여 표시하고 싶습니다.. 여기 쓰고 있어요

  var customersList = (from c in context.Customers 
           where c.IsDeleted == false 
           select new 
           { 
            Name = c.FirstName + " " + c.LastName, 
            c.CustomerId 
           }).ToList(); 

    cmbCustomer.ItemsSource = customersList; 
    cmbCustomer.DisplayMemberPath = "Name"; 
    cmbCustomer.SelectedValuePath = "CustomerId"; 

:

[Table("Customer")] 
    public class Customer 
    { 
     [Key] 
     public int CustomerId { get; set; } 
     [Column("FirstName", TypeName = "ntext")] 
     [MaxLength(100)] 
     public string FirstName { get; set; } 
     [Column("LastName", TypeName = "ntext")] 
     [MaxLength(100)] 
     public string LastName { get; set; } 
     [Column("Email", TypeName = "ntext")] 
     [MaxLength(100)] 
     public string Email { get; set; } 
     [Column("Company", TypeName = "ntext")] 
     [MaxLength(100)] 
     public string Company { get; set; } 
     [Column("Phone", TypeName = "ntext")] 
     [MaxLength(100)] 
     public string Phone { get; set; } 
     [Column("Address", TypeName = "ntext")] 
     [MaxLength(500)] 
     public string Address { get; set; } 
     [Column("IsDeleted", TypeName = "bit")] 
     public bool IsDeleted { get; set; } 
    } 

답변

1

이 좋아하니 내 고객 엔티티 클래스에 따라. 그래서 내 코드에 오류가있을 수 있습니다. 미안합니다. 디스플레이 멤버 경로에 대한 다음

public string FullName { 
    get { 
     return FirstName + " " + LastName; 
    } 
} 

: 당신이 당신의 엔티티 클래스를 편집하고자하는 경우

+0

작동하지 않습니다! 예외가 발생합니다. 저장소 쿼리 (DbSet, DbQuery, DbSqlQuery, DbRawSqlQuery)에 직접 바인딩되는 데이터는 지원되지 않습니다. 대신 DbSet에 Load를 호출하여 DbSet에 데이터를 채운 다음 로컬 데이터에 바인딩하십시오. WPF는 DbSet.Local에 바인딩합니다. WinForms가 DbSet.Local.ToBindingList()에 바인딩되어 있습니다. ASP.NET WebForms의 경우 쿼리에서 ToList()를 호출 한 결과에 바인딩하거나 Model Binding을 사용할 수 있습니다. 자세한 내용은 http://go.microsoft.com/fwlink/?LinkId=389592를 참조하십시오. –

+1

ToList() 부분이 없어진 것을 발견했습니다 !! :) 이 답변을 올바른 버전으로 업데이트하십시오 !! –

0

는 다음과 같은 속성을 추가 할 수 있습니다 (다른 청소기 옵션은 별도의 고객 뷰 모델 클래스를 가지고있다)

cmbCustomer.DisplayMemberPath = "FullName"; 

코드 바인딩에서 수동으로 바인딩하는 대신 XAML 바인딩을 사용하는 것이 좋습니다. 희망이 도움이됩니다.