2013-03-20 38 views
4

我需要一個自定義綁定,我知道何時何地,但我不知道如何做到這一點。這是我的自定義綁定中視圖的關係。考慮像控件一樣的視圖。 enter image description heremvvmcross中的海關綁定交叉視圖

我有從ViewModel-> ContainerView-> FirstView的連接,但我無法將其與TableView連接。爲了將ContainerView連接到FirstView,我做了一個自定義綁定(現在在一個方向上)。而在setValue方法我稱之爲的firstView的方法SetBinding(在這裏我想做的結合)

我嘗試了一些選擇,但什麼也沒有發生,最後一個看起來是這樣的:

public GolferList CurrentGolferList { get; set; } 
    public void SetBinding(GolferList golferList){ 
     this.CurrentGolferList = golferList; 

     TableSource = new TableSourcePlayers(TableViewPlayers); 
     var bindingDescription = new[]{ 
      new MvxBindingDescription {TargetName = "ItemsSource",SourcePropertyPath = "CurrentGolferList"} , 
     }; 

     Binder.Bind(this,TableSource, bindingDescription); 

     TableViewPlayers.Source = TableSource; 
     TableViewPlayers.ReloadData(); 

    } 

我會感謝你能告訴我另一種處理方式。

更新: 我跟着斯圖爾特的鏈接,現在它工作正常,多虧斯圖亞特! 其實,在我的計劃中,TableView是一個MvxSimpleBindableTableViewSource,我想在那裏綁定數據。所以爲了使其工作,我用下面的代碼(SetBinding需要一些外部重構):

private List<IMvxUpdateableBinding> bindings; 
    private string BindingText = "{'ItemsSource':{'Path':'CurrentGolfers'}}"; 
    public object DataContext { 
     get { return dataContext; } 
     set { dataContext = value; 
      if (bindings == null) 
       bindings = this.GetService<IMvxBinder>().Bind(dataContext, TableSource, BindingText).ToList(); 
      else 
       bindings.ForEach(b => b.DataContext = dataContext); 
      } 
     } 
    public void SetBinding(GolferList golferList){ 
     this.DataContext = PlayViewModel; 
     tableView.Source = TableSource; 
     tableView.ReloadData(); 
    } 

注意BindingText分表,而不是視圖本身。

更新2 現在在V3它有點不同。首先,鑑於必須實現IMvxBindable這個成員:

public object DataContext 
    { 
     get { return BindingContext.DataContext; } 
     set { BindingContext.DataContext = value; } 
    } 

    public IMvxBindingContext BindingContext { get; set; } 

(不要忘記處置調用BindingContext.ClearAllBindings(),還調用CreateBindingContext()在viewload)

,然後你會能夠在你的班級中綁定。在我的情況下:

var set = this.CreateBindingSet<FirstPlayViewController, PlayViewModel>(); 
    set.Bind(source).To(vm => vm.CurrentGolfers).Apply(); //I love the new fluent api :) 

回答

2

我想你想要做的是實際的數據綁定視圖,而不是自定義綁定。

這是覆蓋在這個問題 - Custom bindable control in a MvvmCross Touch project

基本上你需要做的是增加「綁定」和「的DataContext」屬性您FirstView的集合。

如果你這樣做,那麼你應該能夠在FirstView內對數據綁定(對DataContext)進行數據綁定,就像在任何普通的MvvmCross視圖中一樣。

注意 - 在v3中這樣做會容易得多,因爲我們添加了一個'BindingContext'對象來協助完成這種類型的操作