2017-09-04 3 views
-1

Ich habe ein benutzerdefiniertes Steuerelement, override von UIScrollView. Beim Rendern werden zwei UIViews gerendert. Einer ist die PDF, einer ist eine Schicht darüber. Die obige Ebene enthält eine Sammlung von Texten, die an verschiedenen Stellen über das PDF gerendert wurden.iOS MvvmCross CustomBinding für Ansicht

Ich benutze MvvmCross also habe ein Modell. Sammlung von Texten ist beobachtbar. Wie kann ich die beobachtbare Sammlung an die Ergebnisse binden, die in der Ebene gerendert werden müssen?

In short...pseudo 

UIScrollViewWrapper 
On draw create two layers 
layer 1 is pdf image 
layer above is view with texts. 

Texts need to be bind and observed by Model.Texts (ObservableCollection<string>) 

Ich habe versucht:

var set = this.CreateBindingSet<ViewWithScrollView, ViewWithScrollViewModel>(); 
set.Bind(ScrollView.LayerView).For(x => x.LayerItems).To(vm => vm.LayerItems); 
set.Apply(); 

Der Layerview ist MvxView für Binding

+0

Ihre Frage ist nicht klar. Und könnten Sie mehr Code teilen, was Sie versucht haben? –

+0

Ich habe eine funktionierende Lösung gefunden, die ich posten werde, ich werde auch versuchen, meine Frage mit einem einfachen Bild klarer zu machen. Update wird bald folgen! Ps. für den Downvoter, schreibe einfach einen Kommentar wie Cole anstatt nur den Downvote ... –

Antwort

1

Ok die Lösung

Die eigene Implementierung des Scroll wird:

public class MyOwnScrollView : UIScrollView, IUIScrollViewDelegate, IMvxBindable 
{ 
    //Implement the IMvxBindable 
    //Add property BindingContext 
    public IMvxBindingContext BindingContext { get; set; } 

    //Property for holding the datacontext 
    [MvxSetToNullAfterBinding] 
    public object DataContext 
    { 
     get { return BindingContext.DataContext; } 
     set { BindingContext.DataContext = value; } 
    } 

    public MyOwnScrollView() 
    { 
     //Call Mvx for creating the bindingcontext 
     this.CreateBindingContext() 
    } 

    //Create something where you can create the set voor fluent binding with the view model. For example 
    public void MyBindingToCreate() 
    { 
     var set = new new MvxFluentBindingDescriptionSet<AViewInMyScrollView, MyViewViewModel>(AViewInMyScrollView); //Because CreateBindingSet is part of MvxView and UIScrollView is not MvxView 
     set.Bind(AViewInMyScrollView).For(x => x.MyPropertyOfView).To(vm => vm.PropertyOfViewModel); 
     set.Apply(); 
} 

Und Der Ort, an dem Sie die ScrollView verwenden, ist eine Bindung an den Datenkontext.

public partial class MyView : MvxView 
{ 
    public MyView() : base("MyView", null) 
    { 

    } 

    public override void ViewDidLoad() 
    { 
     base.ViewDidLoad(); 

     var set = this.CreateBindingSet<MyView, MyViewViewModel>(); 
     set.Bind(MyOwnScrollView).For(s => s.DataContext).To(vm => vm); 
     set.Apply(); 
    } 
} 

PS. Ich werde dies in MvvmCross durch eigene Kontrolle implementieren. Dies kann jedoch für alle eigenen Kontrollen verwendet werden!

Verwandte Themen