2016-12-20 6 views
-2

I wan't ein ContentView mit einem BindableProperty vom Typ DataTemplate zu schaffen, so dass, wenn ich ContentView meine Gewohnheit verwenden kann ich anpassen, wie die Elemente aussehen sollen.Xamarin.Forms: Erstellen Instanz eines Datatemplate

Aber ich möchte den Inhalt im Code anordnen und erstellen, wie kann ich eine Instanz von einem DataTemplate erstellen?

Zum Beispiel habe ich in meiner benutzerdefinierten Ansicht eine Sammlung von Objekten, jetzt für jedes Objekt, das ich eine Sicht basierend auf der festgelegten Datenvorlage erstellen möchte und den Bindungskontext der erstellten Ansicht auf das Objekt festlegen.

Antwort

1

Ich habe es in folgender Weise ausgearbeitet.

ich meine benutzerdefinierte ContentView in Art und Weise folgt vor:

 <controls:MyCustomView Items="{Binding SampleItems}"> 
      <controls:MyCustomView.ItemTemplate> 
       <DataTemplate> 
        <Label Text="{Binding SampleProperty}" /> 
       </DataTemplate> 
      </controls:MyCustomView.ItemTemplate> 
     </controls:MyCustomView> 

dann in den Code hinter der MyCustomView ich eine ItemTemplate bindbare Eigenschaft deklarieren:

public DataTemplate ItemTemplate 
    { 
     get { return (DataTemplate)GetValue(ItemTemplateProperty); } 
     set { SetValue(ItemTemplateProperty, value); } 
    } 

    public static readonly BindableProperty ItemTemplateProperty = BindableProperty.Create(
     nameof(ItemTemplate), 
     typeof(DataTemplate), 
     typeof(MyCustomView), 
     propertyChanged: (bObj, oldValue, newValue) => 
     { 
      var view = bObj as MyCustomView; 
      if (view != null) 
       view.SampleMethodToArrangeItems(); 
     } 
    ); 

jetzt lassen Sie uns sagen, dass in der SampleMethodToArrangeItems Verfahren Ich möchte die Elemente erstellen und anordnen, die aus der bereitgestellten Datenvorlage erstellt wurden:

 foreach (var item in Items) 
     { 
      var itemView = ItemTemplate.CreateContent() as View; 
      if (itemView != null) 
      { 
       itemView.BindingContext = item; 
       // Do something with the create view e.g. add it to Grid.Children 
      } 
     } 
Verwandte Themen