2014-01-08 69 views
0

mvvmcross本身支持綁定到嵌套屬性嗎?綁定子屬性MvvmCross

例如我有一個視圖模型如下:

class MainViewModel : MvxViewModel 
{ 
    public SubViewModelBase SubViewModel 
    { 
      get { return _subViewModel; } 
      set { _subViewModel = value; RaisePropertyChanged(() => SubViewModel); } 
    } 
} 

子視圖模型可以改變,但的MainView將結合爲ALL SubViewModelBase類相同的屬性...示例SubViewModelBase類如下:

class SubViewModelBase : MvxViewModel 
{ 
    public bool ShowIndeterminantProgress 
    { 
      get { return _showIndeterminantProgress; } 
      set { _showIndeterminantProgress = value; RaisePropertyChanged(() => ShowIndeterminantProgress);} 
    } 

    // ... More common properties ... 
} 

所以會的MainView理想結合這樣

  this.CreateBinding(_progressBar) 
     .For(view=> view.Visibility) 
     .To<MainViewModel>(vm => vm.SubViewModel.ShowIndeterminantProgress) 
     .WithConversion("Visibility") 
     .Apply(); 

應該這樣工作嗎?它似乎沒有工作,但輸出中沒有綁定錯誤?

回答

3

mvvmcross本身支持綁定到嵌套屬性嗎?

如若這項工作?

例如,這條線在ApiExamples爲Xamarin.iOS工作:

 set.Bind(errorLabel2).To(vm => vm.Errors.Count); 

https://github.com/MvvmCross/MvvmCross-Tutorials/blob/master/ApiExamples/ApiExamples.Touch/Views/FirstView.cs#L361

該組支持的功能在https://github.com/MvvmCross/MvvmCross/wiki/Databinding#fluent描述 - 但不可否認這個流暢的綁定在Xamarin.iOS中比在Wpf中更爲成熟/使用。


要嘗試調試爲什麼你的當前綁定可能無法工作嘗試添加一個簡單的屬性,以你的觀點,提供調試輸出

private Visibility _mockVisibility; 
public Visibility MockVisibility 
{ 
    get 
    { 
     return _mockVisibility; 
    } 
    set 
    { 
     Debug.WriteLine("MockVisibility called with " + value); 
     _mockVisibility = value; 
    } 
} 

,並結合本爲:

this.CreateBinding(this) 
    .For(view=> view.MockVisibility) 
    .To<MainViewModel>(vm => vm.SubViewModel.ShowIndeterminantProgress) 
    .WithConversion("Visibility") 
    .Apply(); 

這應該給你調試/跟蹤輸出,並應該給你一個地方放置一個斷點來理解調用堆棧(雖然期望這包含很多可能很難的反射通讀)。

除此之外:

+0

謝謝斯圖爾特。所以這是行得通的,你是對的。看起來有問題的屬性是Pressed屬性[link] http://stackoverflow.com/questions/17926975/android-view-states-pressed-activated-selected-etc-bindings-do-i-have- to-wr在子視圖模型中綁定(在Android上)。我會繼續研究這個,調試器擊中屬性的getter,但是setter不會被擊中,即使我使用雙向模式。但其他嵌套屬性都按我的預期工作。謝謝! – AlexUT