2010-11-24 2 views
1

내 xaml에는 왼쪽에 Customers ListBox가 있습니다. 고객이 선택되면 오른쪽에 고객 정보 (이름, 주소, 전화 번호, 유형 등)가 바인드 텍스트 상자 또는 콤보 상자에 표시됩니다.WPF Combobox SelectionChanged 레코드 바인딩

오른쪽에서 Type은 값이 변경 될 때 무언가를 채우는 SelectionChanged 이벤트가있는 콤보 상자입니다. 문제는 왼쪽의 ListBox에서 다른 고객을 선택할 때마다 Type SelectionChanged 이벤트가 발생하여 값을 채우는 것입니다. 어떻게 이런 일이 일어나지 않도록 할 수 있습니까? 감사!

답변

0

복잡한 문제는 아니지만 잘 설명되지 않았습니다. 더 좋은 예를 들어 주시겠습니까?

MVVM 패턴을 사용하고 있습니까? 나는 "CustomersListViewModel"과 "CustomerDetailsViewModel"과 같은 여러보기 및보기 모델에 대한보기를 분해 할 수 있다고 상상합니다.

ListBox를 Customers 컬렉션에 바인딩하고 "SelectItem"을 CustomersListViewModel의 "SelectedCustomer"라는 속성으로 설정하면 CustomersListBox에서 선택 항목이 변경되면 " SelectedCustomerChanged "또는"CustomersDetailsViewModel "(매개 변수로 선택한 고객 전달)을 본질적으로 새로 만들 것입니다. 그러면 새 CustomerDetails가 표시됩니다.

내 생각에 당신은 고객을 바꿔 치기하고있는 콤보 박스의 선택 이벤트를 거친 것이므로 문제가 발생합니다.

CustomersListViewModel

  • BindableCollection 고객 (목록 상자의 selectedItem에 바운드)
  • 고객 SelectedCustomer
  • CustomerDetailViewModel CustomerDetailViewModel을 (리스트 박스에 바인딩) (A 바운드 :

    예는 고객의 기 ContentControl)

  • SelectedCustomerChanged

CustomerDetailViewModel는 (이 고객 객체의 속성에 바인딩 컨트롤)

  • 고객 CurrentCustomer (생성자 PARAMS에서 고객 객체를 수용) (리스트 박스 인 selectionchanged 이벤트에 해고)

    "SelectedCustomerChanged"메서드는 다음과 같습니다.

    public void SelectedCustomerChanged() 
    { 
        this.CustomerDetailViewModel = new CustomerDetailViewModel(this.SelectedCustomer) 
        // Replace this with some activation of view code? 
        this.ActivateViewModel(this.CustomerDetailViewModel) 
    } 
    

    내 접근 방식이 맞습니까?

    감사합니다. 도움이 되었기를 바랍니다.

+0

안녕하세요 Ben, MVVM 패턴을 사용하고 있지 않습니다. 데이터에 EF를 사용하는 WPF 응용 프로그램입니다. 고객과 함께 목록 상자를로드합니다. 고객이 선택되면 Windows DataContext가 SelectedItem으로 설정됩니다.나는 새로운 고객이 선택 될 때마다 Type이 변경되기 때문에 ComboBox SelectionChanged 이벤트가 시작되었다고 생각합니다. ComboBox 드롭 다운 목록 변경에서 직접 변경하지 않은 경우 ComboBox SelectionChanged가 실행되지 않도록하는 방법을 알아야합니다. – Seecott