2017-08-31 5 views
1

Ich möchte eine syncfusion linearlayout listview einfügen, aber aus irgendeinem Grund wird keine Elemente/Daten angezeigt, und ich bekomme keine Fehler zur gleichen Zeit, versuchte ich Binding-Syntax ändern und ein paar Dinge, aber ich kann es nicht richtig verstehen.Syncfusion Xamarin Listview keine Elemente angezeigt

  <syncfusion:SfListView x:Name="listView" 
       ItemTemplate="{Binding Source={local2:BandInfoRepository}, Path=BandInfo, Mode=TwoWay}" 
       ItemSize="100" 
       AbsoluteLayout.LayoutBounds="1,1,1,1" 
       AbsoluteLayout.LayoutFlags="All" > 
       <syncfusion:SfListView.ItemTemplate> 
        <DataTemplate> 
         <Grid RowSpacing="0" Padding="0,12,8,0" ColumnSpacing="0" Margin="0"> 
          <Grid.RowDefinitions> 
           <RowDefinition Height="Auto" /> 
           <RowDefinition Height="1" /> 
          </Grid.RowDefinitions> 
          <Grid RowSpacing="0" Padding="8,0,8,10"> 
           <Grid.RowDefinitions> 
            <RowDefinition Height="auto" /> 
           </Grid.RowDefinitions> 
           <Grid.ColumnDefinitions> 
            <ColumnDefinition Width="Auto" /> 
            <ColumnDefinition Width="Auto" /> 
           </Grid.ColumnDefinitions> 
           <Image Source="{Binding Path=BandImage}" 
            Grid.Column="0" 
            Grid.Row="0" 
            HeightRequest="80" 
            WidthRequest="70" 
            HorizontalOptions="Start" 
            VerticalOptions="Start" 
           /> 
           <StackLayout Orientation="Vertical" 
            Padding="5,-5,0,0" 
            VerticalOptions="Start" 
            Grid.Row="0" 
            Grid.Column="1"> 
            <Label Text="{Binding Path=BandName}" 
             FontAttributes="Bold" 
             FontSize="16" 
             BackgroundColor="Green" 
             TextColor="#000000" /> 
            <Label Text="{Binding Path=BandDescription}" 
             Opacity="0.54" 
             BackgroundColor="Olive" 
             TextColor="#000000" 
             FontSize="13" /> 
           </StackLayout> 
          </Grid> 
          <BoxView Grid.Row="1" 
           HeightRequest="1" 
           Opacity="0.75" 
           BackgroundColor="#CECECE" /> 
         </Grid> 
        </DataTemplate> 
       </syncfusion:SfListView.ItemTemplate> 
      </syncfusion:SfListView> 

Und das ist die Klasse, wo ich die Daten bekommen:

Das ist mein XAML ist

public class BandInfo : INotifyPropertyChanged 
{ 
    private string bandName; 
    private string bandDesc; 
    private ImageSource _bandImage; 
    public string BandName 
    { 
     get { return bandName; } 
     set 
     { 
      bandName = value; 
      OnPropertyChanged("BandName"); 
     } 
    } 

    public string BandDescription 
    { 
     get { return bandDesc; } 
     set 
     { 
      bandDesc = value; 
      OnPropertyChanged("BandDescription"); 
     } 
    } 

    public ImageSource BandImage 
    { 
     get { return _bandImage; } 
     set 
     { 
      _bandImage = value; 
      OnPropertyChanged("BandImage"); 
     } 
    } 

    public event PropertyChangedEventHandler PropertyChanged; 

    public void OnPropertyChanged(string name) 
    { 
     if (this.PropertyChanged != null) 
      this.PropertyChanged(this, new PropertyChangedEventArgs(name)); 
    } 
} 

Und für den Fall, das ist, wie ich das bin Füllung Sammlung (BandInfoRepository.cs):

public class BandInfoRepository 
{ 
    private ObservableCollection<BandInfo> bandInfo; 

    public ObservableCollection<BandInfo> BandInfo 
    { 
     get { return bandInfo; } 
     set { this.bandInfo = value; } 
    } 

    public BandInfoRepository() 
    { 
     GenerateBookInfo(); 
    } 

    internal void GenerateBookInfo() 
    { 
     string[] BandNames = new string[] { 
      "Nirvana", 
      "Metallica", 
      "Frank Sinatra" 
     }; 

     string[] BandDescriptions = new string[] { 
      "Description", 
      "Description", 
      "Description" 
     }; 

     bandInfo = new ObservableCollection<BandInfo>(); 

     for (int i = 0; i < BandNames.Count(); i++) 
     { 
      var band = new BandInfo() 
      { 
       BandName = BandNames[i], 
       BandDescription = BandDescriptions[i], 
       BandImage = ImageSource.FromResource("Lim.Images.Image" + i + ".png") 
      }; 
      bandInfo.Add(band); 
     } 
    } 
} 

ich hoffe, euch kann mir helfen, wie ich habe jetzt mit diesem stecken für eine Weile. Danke im Voraus.

+0

warum ItemTemplate eines Repo gebunden ist? – Jason

+0

@Jason Es ist eine Klasse, ich nahm nur das Beispiel und benannte Klassen für mehr "geeignete" Namen für mein Projekt um. –

+0

Ich füge die ganze .cs hinzu, damit du sie sehen kannst. –

Antwort

1

Sieht aus, als ob Sie unbeabsichtigt ItemTemplate zweimal binden und keine ItemsSource sogar einmal binden.

+0

Lassen Sie mich das überprüfen, ich bin neu in OOP und Xamarin auch, werde versuchen, es zu beheben –

+0

Scheint wie es teilweise jetzt funktioniert , aber die BandImage-Bindung funktioniert immer noch nicht und einige andere Eigenschaften auch, irgendeine Idee? –

0

Wir haben uns Ihr Code-Snippet angesehen und festgestellt, dass Sie die zugrunde liegende Auflistung an die ItemTemplate-Eigenschaft anstelle der ItemsSource-Eigenschaft gebunden haben. Um die zugrunde liegende Sammlung zu binden, müssen Sie Ihr ViewModel (z. B. BandInfoRepository) als BindingContext für ContentPage festlegen. In den folgenden Code-Snippets finden Sie Informationen zum Festlegen von BindingContext für Ihre Seite und zum Binden der zugrunde liegenden Auflistung an die ItemsSource-Eigenschaft.

-Code Beispiel: [XAML]

<ContentPage> 
    <ContentPage.BindingContext> 
    <local:BandInfoRepository/> 
    </ContentPage.BindingContext> 

    <ContentPage.Content> 
    <listView:SfListView x:Name="listView" ItemSize="70" ItemsSource="{Binding BandInfo}" > 

     <listView:SfListView.ItemTemplate> 
     <DataTemplate> 
      <ViewCell> 
      <ViewCell.View> 
       <Grid x:Name="grid" RowSpacing="1"> 
       <Grid.RowDefinitions> 
        <RowDefinition Height="*" /> 
        <RowDefinition Height="1" /> 
       </Grid.RowDefinitions> 
       <Grid RowSpacing="1"> 
        <Grid.ColumnDefinitions> 
        <ColumnDefinition Width="50" /> 
        <ColumnDefinition Width="*" /> 
        </Grid.ColumnDefinitions> 
        <Image Source="{Binding BandImage}" 
    VerticalOptions="Center" 
    HorizontalOptions="Center" 
    HeightRequest="50" Aspect="AspectFit"/> 
        <Grid Grid.Column="1" 
    RowSpacing="1" 
    Padding="10,0,0,0" 
    VerticalOptions="Center"> 
        <Label Text="{Binding ContactName}"/> 
        </Grid> 
       </Grid> 
       <StackLayout Grid.Row="1" BackgroundColor="Gray" HeightRequest="1"/> 
       </Grid> 
      </ViewCell.View> 
      </ViewCell> 
     </DataTemplate> 
     </listView:SfListView.ItemTemplate> 
    </listView:SfListView> 
    </ContentPage.Content> 
</ContentPage> 

Für Ihre Unterstützung haben wir die Arbeitsprobe Link unten angebracht.

Beispiellink: http://www.syncfusion.com/downloads/support/directtrac/186932/ze/ListViewSample905947849

Verwandte Themen