2009-07-28 75 views
1

我有兩個組合的'製作'和'模型',他們已將其SelectedValue屬性綁定到具有ModelID和MakeID的Vehicle對象。WPF綁定:從數據庫中重新加載連接後刷新綁定

赫雷什模型...

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

用戶可以在一個單獨的控制搜索車輛和該換出底層的汽車對象。如果您在同一個Make的車輛之間進行切換,一切正常,但是如果Make changes我離開數據庫並重新加載ModelSpec集合。組合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

感謝您的幫助,最後這個伎倆,我更喜歡它到我的第一個解決方法。

對我來說這似乎很好,但我猜別人可能會驚慌失措?如果有的話,請隨時發表評論!

ModelSpecs在我的ManageVehicleViewModel上,所以它似乎不適合做額外的PropertyChanged調用。

private IEnumerable<ModelSpec> _modelSpecs; 
    public IEnumerable<ModelSpec> ModelSpecs 
    { 
     get 
     { 
      return _modelSpecs; 
     } 
     set 
     { 
      if (_modelSpecs == value) return; 
      _modelSpecs = value; 
      OnPropertyChanged("ModelSpecs"); 
      OnPropertyChanged("Vehicle"); 
     } 
    } 
0

好吧,這可能只是另一種「不雅」的解決方案,但更正確的方法是從組合框中獲取BindingExpression並調用BindingExpression.UpdateSource

+0

他的代碼和他的標籤建議他使用Model-View-ViewModel,這將使得這是一個禁忌。 – 2009-07-28 20:56:29

1

只是使ModelSpec集合可觀察(即自己實現INotifyCollectionChanged或使用ObservableCollection類)。