2017-06-16 1 views
0

Ich fing an, Xamarin zu lernen, und ich versuche, erstes Testprojekt zu erstellen. Ich habe die ListView erstellt, die die ObservableCollection aus BindingContext anzeigt. "Take" ist eine Tabelle mit drei Eigenschaften. Das Problem ist, dass wenn ich die App auf dem Emulator starte, der folgende Fehlerdialog erscheint: "Das Prozesssystem reagiert nicht. Möchten Sie es schließen?"
Aber wenn ich Tag und alle internen XAML-Code löschen, funktioniert alles gut, aber ich möchte Werte der Eigenschaften der Klasse "Take" in jedem Element von ListView display.XAML ListView in Xamarin funktioniert nicht

<?xml version="1.0" encoding="utf-8" ?> 

<ContentPage xmlns="http://xamarin.com/schemas/2014/forms" 
     xmlns:x="http://schemas.microsoft.com/winfx/2009/xaml" 
     x:Class="App1.Views.Page1"> 

<ContentPage.Content> 
    <StackLayout> 
     <Label Text="Welcome to my first project"></Label> 
     <Label Text="Why does it does not work?"></Label> 
     <ListView ItemsSource="{Binding GetList}"> 
      <ListView.ItemTemplate> 
       <DataTemplate> 
        <TextCell Text="{Binding Word}"></TextCell> 
        <Button Text="SomeText"></Button> 
       </DataTemplate> 
      </ListView.ItemTemplate> 
     </ListView> 
    </StackLayout> 
</ContentPage.Content> 
</ContentPage> 

Und das ist mein C# Binding

public class SQLiteSamplePage 
{ 
    private readonly SQLiteConnection _sqLiteConnection; 
    private ObservableCollection<Take> list; 

    public SQLiteSamplePage() 
    { 
     _sqLiteConnection = DependencyService.Get<ISQLite>().GetConnection(); 
     _sqLiteConnection.CreateTable<Take>(); 
     _sqLiteConnection.Insert(new Take 
     { 
      Word = "SomeWord1", 
      Translation = "Some translation 1" 
     }); 

     _sqLiteConnection.Insert(new Take 
     { 
      Word = "SomeWord", 
      Translation = "SomeTranslation" 
     }); 

     list =new ObservableCollection<Take>(_sqLiteConnection.Table<Take>()); 
    } 
    public ObservableCollection<Take> GetList 
    { 
     get { return list; } 
    } 
} 

Und hier ist ein Code einer Tabelle

public class Table 
{ 
    [PrimaryKey, AutoIncrement] 
    public int ID { get; set; } 
    public string Word { get; set; } 
    public string Translation { get; set; } 
} 
+0

versuchen Sie, den Button von Ihrem DataTemplate zu entfernen – Jason

Antwort

0

Versuchen Sie, die TextCell und die Button in einem StackLayout oder jede Art setzen von Layout innerhalb eines <ViewCell> Elements:

<ListView ItemsSource="{Binding GetList}"> 
    <ListView.ItemTemplate> 
     <DataTemplate> 
      <ViewCell> 
       <StackLayout> 
        <TextCell Text="{Binding Word}"></TextCell> 
        <Button Text="SomeText"></Button> 
       </StackLayout> 
      </ViewCell> 
     </DataTemplate> 
    </ListView.ItemTemplate> 
</ListView> 

Das Kind des Elements DataTemplate muss vom Typ stammen oder abgeleitet werden.

0

Sie können keine TextCell und etwas anderes, in Ihrem Fall eine Button kombinieren. Wenn Sie sowohl den Text als auch die Schaltfläche anzeigen möchten, müssen Sie eine benutzerdefinierte Zelle verwenden.

Dies wird mit der Basisklasse ViewCell getan und im Inneren gibt definieren Sie das gewünschte Layout

<StackLayout> 
    <Label Text="Welcome to my first project"></Label> 
    <Label Text="Why does it does not work?"></Label> 
    <ListView ItemsSource="{Binding GetList}"> 
     <ListView.ItemTemplate> 
      <DataTemplate> 
       <ViewCell> 
        <StackLayout> 
         <Label Text="{Binding Word}"></Label> 
         <Button Text="SomeText"></Button> 
        </StackLayout> 
       </ViewCell> 
      </DataTemplate> 
     </ListView.ItemTemplate> 
    </ListView> 
</StackLayout> 

hoffe, das hilft zu zeigen.

Verwandte Themen