2015-02-25 2 views
1
списке следует

Создание моей первой корневой страницы:Xamarin.Forms Привязка данных пользовательских ячейки

public class App : Application 
{ 
    public App() 
    { 
     MainPage = new NavigationPage (new ListExample()); 
    } 
} 

Это мой Сотрудник объект:

public class Employee 
{ 
    public string ImageUri { get; set; } 
    public string DisplayName { get; set; } 
    public string Twitter { get; set; } 

    public Employee (string imageUri, string displayName, string twitter) 
    { 
     this.ImageUri = imageUri; 
     this.DisplayName = displayName; 
     this.Twitter = twitter; 
    } 
} 

Это, как я установить элементы для моего UITableView:

public class ListExample : ContentPage 
{ 
    public ListExample() 
    { 
     var listView = new ListView 
     { 
      RowHeight = 40 
     }; 
     List<Employee> myListOfEmployeeObjects = new List<Employee> { 
      new Employee("", "Max Mustermann", "@fake1"), 
      new Employee("", "Eva Mustermann", "@fake2") 
     }; 
     listView.ItemsSource = myListOfEmployeeObjects; 
     listView.ItemTemplate = new DataTemplate(typeof(EmployeeCell)); 
    } 
} 

А вот мой настраиваемое представление ячейки таблицы:

public class EmployeeCell : ViewCell 
{ 
    public EmployeeCell() 
    { 
     var image = new Image 
     { 
      HorizontalOptions = LayoutOptions.Start 
     }; 
     image.SetBinding(Image.SourceProperty, new Binding("ImageUri")); 
     image.WidthRequest = image.HeightRequest = 40; 

     var nameLayout = CreateNameLayout(); 

     var viewLayout = new StackLayout() 
     { 
      Orientation = StackOrientation.Horizontal, 
      Children = { image, nameLayout } 
     }; 
     View = viewLayout; 
    } 

    static StackLayout CreateNameLayout() 
    { 

     var nameLabel = new Label 
     { 
      HorizontalOptions= LayoutOptions.FillAndExpand 
     }; 
     nameLabel.SetBinding(Label.TextProperty, "DisplayName"); 

     var twitterLabel = new Label 
     { 
      HorizontalOptions = LayoutOptions.FillAndExpand 
     }; 
     twitterLabel.SetBinding(Label.TextProperty, "Twitter"); 

     var nameLayout = new StackLayout() 
     { 
      HorizontalOptions = LayoutOptions.StartAndExpand, 
      Orientation = StackOrientation.Vertical, 
      Children = { nameLabel, twitterLabel } 
     }; 
     return nameLayout; 
    } 
} 

Если я правильно понимаю, необходимо установить привязку в ячейке пользовательского вида таблицы. Система принимает свойства моего объекта и имя свойства, и имя привязки должно совпадать.

Использование приведенного выше кода приводит к пустующему виду.

here you can see the empty view I'm talking about

Что я делаю неправильно?

+1

Не можете найти что-нибудь не так и 'ListView' хорошо работает здесь. Возможно, ваш «ListView» ошибочен? Не могли бы вы также разместить здесь макет страницы? –

+0

@AlexLau: Спасибо за ваш ответ. Я отредактировал мой вопрос и включил еще один код. Вид таблицы работал с макетом по умолчанию. Теперь я переключился на пользовательскую ячейку, и что-то пошло не так. – testing

ответ

2

Я забыл установить Content. Либо использовать

Content = listView; 

или более подробно:

Content = new StackLayout 
{ 
    VerticalOptions = LayoutOptions.FillAndExpand, 
    Children = { listView } 
}; 
Смежные вопросы