2016-03-04 50 views
1

我有一個擴展BaseObservable的模型。我有一個視圖模型,它包含對模型的引用並訂閱模型中的屬性更改。如何從視圖模型的回調中切換Model.propertyId?在下面的示例中,BR.assignedId是模型中的屬性。例如:onPropertyChanged - 如何從外部類切換propertyId

視圖模型

public void onPropertyChanged(Observable sender, int propertyId) 
{ 

    switch (propertyId) 
    { 
     case MyModel.BR.assignedId://compile error 
      notifyPropertyChanged(BR.assignedImage); 
      break; 
    } 
} 

回答

0

我建議你閱讀Observer模式。上面的代碼有Entities:Observer和Observable。觀察員有觀測方法。任何想要觀察「可觀察」的類都需要將自己註冊爲「觀察者」。 Observable調用Observer上的observing方法,這就是通常的回調方式。 (類別和方法的名稱可能不同,我根據意圖和上下文使用)

檢查'ViewModel.java'類將實現一些'觀察者'接口,該接口具有'onPropertyChanged()'方法。你將不得不在Model.java中設置ViewModel.java的對象。 (檢查你應該有一個像addPropertyChangeObserver()這樣的名字的方法,雖然它可能是不同的但是類似的方法。使用這個方法在Model.java中設置ViewModel.java的對象。現在Model.java會調用方法' onPropertyChanged'on ViewModel.java

如果你想在模型上修改一些東西然後檢查sender參數你可以在Model實現的接口中添加另一個方法,並且可以使用它在Model上做修改或者可以簡單地發件人在使用instanceof檢查其類型並可以從回調方法執行Model.java上的過程

+0

是的代碼目前執行上面描述的所有事情我的模型調用我的視圖就好了問題是我不知道如何處理propertyID我想運行不同的代碼哪個模型屬性改變了。那有意義嗎? – Mike

+0

我修改了答案,看看它是否有幫助... –

+0

我不想修改模型中的任何內容。基本上,模型中的ID會發生變化,我需要更新視圖中顯示的視圖模型中包含的圖像。我通過通知視圖我的圖像已經改變來實現這一點。我只能在我的模型更改id後做到這一點。我還有其他一些需要對模型更改作出類似反應的屬性。 – Mike