2015-02-05 4 views
1

Я хочу сделать простую таблицу со строками и столбцами:Xamarin Кросплатформенная Таблица с строк и столбцов

C1 C2 C3 C4 

R1 R1 R1 R1 

R2 R2 R2 R2 

и так далее.

Сначала я начал создавать сетку и назначать метки столбцам и строкам, но очень сложно управлять им и делать такие вещи, как фильтр, переупорядочивать и удалять строки. Что еще я могу сделать?

Редактировать: Для удаления строк я использовал словарь со значением, представляющим каждую строку и номер строки. После этого я только что использовал layout.Children.RemoveAt(rowNumber). Проблема в том, что другие строки не изменяются, и между ними есть промежутки. Я думаю, мне придется переделать макет для каждого удаления строки.

+0

Вам действительно нужен стол? Граница и линия? Или просто устройте их в том порядке, который вы показали? – DQuaglio

+0

Мне не нужна граница и линия, просто устраивайте. Мне удалось что-то сделать с stacklayouts, горизонтально ориентированным для строк. Теперь я хочу посмотреть, есть ли простой способ удалить строку. – Dragos

+1

Может быть, просто с детьми. Возможно, это может сработать. – DQuaglio

ответ

1

Попробуйте, это может быть самый простой способ, создать ViewItem и элемент ViewModel, вид будет что-то вроде этого:

public class NearMeView : ContentPage 
    { 
     private ListView _listView; 
     private MyViewModel _viewModel; 
     public NearMeView() 
     { 
      _viewModel = new MyViewModel(); 
      BindingContext = _viewModel; 
      _listView = new ListView(){ 
       ItemTemplate = CreateItemTemplate()//Here you will set th data templates for each row and in each label nameLabel.SetBinding<Item> (Label.TextProperty, x => x.Name); 
      }; 
      _listView.SetBinding<MyViewModel> (ListView.ItemsSourceProperty, x => x.Rows); 
} 

public class MyViewModel : ViewModel 
{ 
    List<Item>Rows;//will be populated from your DB each item will represent a Row, so you just need to remove from this list the item and automatically from the View should be removed the row. 
    // Method that you need to remove filter etc. 
} 
private DataTemplate CreateItemTemplate() 
     {//this metod create the layout that you want to apply for each row in this example there are 3 columns, in each column there is a label, each label is binded to an element of the ItemSourceProperty of the ListView 
      return new DataTemplate (() => { 
       var nameLabel = new Label(); 
       var typeLabel = new Label(); 
       var distanceLabel = new Label(){ HorizontalOptions = LayoutOptions.EndAndExpand,VerticalOptions = LayoutOptions.Center }; 
       nameLabel.SetBinding<BranchModel> (Label.TextProperty, x => x.Name); 
       typeLabel.SetBinding<BranchModel> (Label.TextProperty, x => x.Type); 
       distanceLabel.SetBinding<BranchModel> (Label.TextProperty,x=> x.Distance); 
       var leftStack = new StackLayout(){ 
        Orientation = StackOrientation.Vertical, 
        VerticalOptions = LayoutOptions.Center, 
        Children = { nameLabel, typeLabel }, 
        Padding = new Thickness (8,0,0,0) 

       }; 
       return new ViewCell() { 
        View = new StackLayout() { 
         Orientation = StackOrientation.Horizontal, 
         Spacing = 5, 
         Children = { leftStack, distanceLabel }, 
         Padding = new Thickness (0,0,0,8) 
        } 
       }; 
      }); 
     } 

Это довольно много кода, который я использую, чтобы отфильтровать список используя SearchBar

+0

Я получаю некоторые ошибки. BranchModel Я подозреваю, что это модель, которую вы описали. Я не знаю, что такое _branchesListView и точно не знаю, что делать в CreateItemTemplare(). Просто создайте новые ярлыки и оцените их значения? Разве я не делаю этого в CreateBranchItemTemplate? И какой элемент я буду связывать с ContentPage? _listView? – Dragos

+0

И 1 вопрос: ListView отображает элементы по вертикали. Это означает, что я сделаю горизонтальный StackLayout с помощью ListViews в качестве столбцов. Верный? Если это так, я построю свою таблицу через столбцы, а не строки, которые, по-моему, менее логичны. – Dragos

+0

[ListView] (http://developer.xamarin.com/guides/cross-platform/xamarin-forms/working-with/listview/) каждая строка будет содержать другой макет, если одна строка содержит 4 элемента, они являются вашей колонкой , Теперь я просто исправлю код – DQuaglio

Смежные вопросы