2009-07-28 3 views
1

두 개의 콤보의 'Make'및 'Model'이 있는데, 그들은 자신의 SelectedValue 속성을 ModelID 및 MakeID를 사용하여 Vehicle 개체에 바인딩합니다.WPF 바인딩 : 데이터베이스에서 콤보를 다시로드 한 후 바인딩 새로 고침

Heres는 모델 ...

<ComboBox DisplayMemberPath="Description" ItemsSource="{Binding Path=ModelSpecs}" SelectedValue="{Binding Path=Vehicle.ModelID}" SelectedValuePath="ID" /> 

사용자는 별도의 제어 자동차를 검색하고이 기본 차량 개체를 스왑. 동일한 Make의 차량간에 전환하는 경우 모든 것이 제대로 작동하지만 Make가 변경되면 데이터베이스로 이동하여 ModelSpec 컬렉션을 다시로드합니다. combo dosnt는 바인딩을 새로 고쳐야하기 때문에 모델 설명을 표시합니다.

현재 내 해결 방법은 모델을 다시로드하는 메소드의 끝에 추가하는 것입니다. 정상적으로 작동하지만 특히 정교한 솔루션은 아닙니다.

기본적으로
 var modelID = ViewModel.Vehicle.ModelID; 
     ViewModel.Vehicle.ModelID = string.Empty; 
     ViewModel.Vehicle.ModelID = modelID; 

난 그냥에서 INotifyPropertyChanged를 유발하고있어 ...

private string _modelID; 
    public string ModelID 
    { 
     get { return _modelID; } 
     set 
     { 
      if (_modelID == value) return; 
      _modelID = value; 
      OnPropertyChanged("ModelID"); 
     } 
    } 
나는 비슷한 세련 솔루션의 몇 가지 생각할 수

-하지만 더 나은 방법이 있어야합니다! 어떤 도움을 주셔서 감사합니다!

답변

0

도움 주셔서 감사합니다. 결국이 트릭을 수행하고 첫 번째 해결 방법을 선호합니다.

내게는 괜찮은 것처럼 보이지만 다른 사람들이 공포에 휩싸 일 수 있다고 생각하십니까? 그렇다면 아무쪼록 부탁드립니다!

ModelSpec은 내 ManageVehicleViewModel에 있으므로 추가 PropertyChanged 호출을 사용하지 않는 것이 좋습니다.

0

글쎄, 이것은 아마도 또 다른 "세련되지 않은"해결책 일 수 있지만, 올바른 방법은 콤보 상자에서 BindingExpression을 가져오고 BindingExpression.UpdateSource으로 전화하는 것입니다.

+0

그의 코드와 태그는 Model-View-ViewModel을 사용하는 것이 좋습니다. –

1

ModelSpec 콜렉션을 관찰 가능하게 설정하십시오. 즉, INotifyCollectionChanged을 직접 구현하거나 ObservableCollection 클래스를 사용하십시오.