Информация об изменениях

Сообщение Re[6]: AMMY - XAML с человеческим лицом от 18.01.2017 17:16

Изменено 18.01.2017 17:17 ionoy

Re[6]: AMMY - XAML с человеческим лицом
Здравствуйте, IT, Вы писали:

IT>Здравствуйте, ionoy, Вы писали:


I>>Если просто так 10 кнопок, то придётся копипастить.

IT>Да. Нужно просто так 10 кнопок. Или не кнопок, но 10. Или 15.

Всегда легче отталкиваться от конкретной задачи. Если задачи нет, то предложу несколько решений.

Первое, если есть данные, уже описано парой сообщений выше.
1. Добавляем коллекцию в модель представления
class ViewModel 
{
  public ObservableCollection<Item> Items { get; }    
}


2. Биндимся к ней из вьюшки
ItemsControl { 
  ItemsSource: bind Items
  ItemTemplate: DataTemplate {
    // здесь описываем произвольный шаблон
  }
}


Второе решение — это если данных нет и хочется добавить 10 произвольных кусков шаблона.
Выглядит примерно так:

mixin Block() for StackPanel {
  TextBlock { "Привет" }
  Button { "Нажми сюда!" }
}

Window "MainWindow" {
  #Block
  #Block  
  #Block
  #Block
  #Block
  #Block
  #Block
  #Block
  #Block
  #Block
}

можно укоротить

mixin FiveBlocks() : StackPanel {
  #Block
  #Block
  #Block
  #Block
  #Block
  #Block
}

Window "MainWindow" {
  #FiveBlocks
  #FiveBlocks
}



Конечно, с циклами получилось бы короче, но мне правда сложно придумать ситуацию где это могло бы быть нужно. Если сможешь привести конкретный пример, то можно будет подумать над реализацией.
Re[6]: AMMY - XAML с человеческим лицом
Здравствуйте, IT, Вы писали:

IT>Здравствуйте, ionoy, Вы писали:


I>>Если просто так 10 кнопок, то придётся копипастить.

IT>Да. Нужно просто так 10 кнопок. Или не кнопок, но 10. Или 15.

Всегда легче отталкиваться от конкретной задачи. Если задачи нет, то предложу несколько решений.

Первое, если есть данные, уже описано парой сообщений выше.
1. Добавляем коллекцию в модель представления
class ViewModel 
{
  public ObservableCollection<Item> Items { get; }    
}


2. Биндимся к ней из вьюшки
ItemsControl { 
  ItemsSource: bind Items
  ItemTemplate: DataTemplate {
    // здесь описываем произвольный шаблон
  }
}


Второе решение — это если данных нет и хочется добавить 10 произвольных кусков шаблона.
Выглядит примерно так:

mixin Block() for StackPanel {
  TextBlock { "Привет" }
  Button { "Нажми сюда!" }
}

StackPanel {
  #Block
  #Block  
  #Block
  #Block
  #Block
  #Block
  #Block
  #Block
  #Block
  #Block
}

можно укоротить

mixin FiveBlocks() : StackPanel {
  #Block
  #Block
  #Block
  #Block
  #Block
  #Block
}

StackPanel {
  #FiveBlocks
  #FiveBlocks
}



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