Есть страница разделенная Grid'ом. Нужно в одну ячейку поместить динамически созданные элементы управления (кнопки в виде плиток), причем используя условие. Если сomboBox.SelectedItem = ... , то создать определенное количество элементов. Если значение сomboBox.SelectedItem изменилось, то удалить элементы управления, и создать новые. Количество зависит от того, что будет выбрано в comboBox.
Как пример, вот такое меню:
Окей, смотрите, что должно быть.
Для начала, VM. Допустим, у нас есть список яблок и список груш.
enum ProductType
{
Apples, Pears
}
Нам нужна коллекция всех продуктов:
public static IEnumerable<ProductType> AllProductTypes { get; } =
Enum.GetValues(typeof(ProductType)).Cast<ProductType>();
И свойство с INotifyPropertyChanged
:
private ProductType currentProduct;
public ProductType CurrentProduct
{
get => currentProduct;
set => Set(ref currentProduct, value);
}
(я пользуюсь базовым классом отсюда).
Это мы привяжем к комбобоксу:
<Combobox ItemsSource="{x:Static local:YourVM.AllProductTypes}"
SelectedItem="{Binding CurrentProduct}"/>
Теперь, список. Пускай у нас есть список сортов яблок и список сортов груш.
class Product { }
class AppleVariety : Product { }
class PearVariety : Product { }
IEnumerable<Product> AllProducts = ...;
IEnumerable<AppleVariety> AllApples = AllProducts.OfType<AppleVariety>().ToList();
IEnumerable<PearVariety> AllPears = AllProducts.OfType<PearVariety>().ToList();
Теперь, нам нужно свойство, представляющее собой текущий список — яблоки или груши.
IEnumerable<Product> currentSelection;
IEnumerable<Product> CurrentSelection
{
get => currentSelection;
set => Set(ref currentSelection, value);
}
Затем, нам нужно при изменении значения CurrentProduct
менять и список. Сделаем это в сеттере CurrentProduct
: вместо
set => Set(ref currentProduct, value);
напишем там
set => if (Set(ref currentProduct, value)) CurrentSelection = GetCurrentProductList();
и соответственно
IEnumerable<product> GetCurrentProductList()
{
switch (CurrentProduct)
{
case Apples:
return AllApples;
case Pears:
return AllPears;
default:
throw new InvalidOperationException("Unknown product kind");
}
}
Отлично, теперь отображение.
Тут всё просто. Список продуктов показываем так:
<ListView ItemsSource="{Binding CurrentSelection}>
<ItemsControl.ItemsPanel>
<ItemsPanelTemplate>
<UniformGrid Columns="3"/>
</ItemsPanelTemplate>
</ItemsControl.ItemsPanel>
<ItemsControl.ItemTemplate>
<DataTemplate>
<!-- тут код для отображения вашего продукта -->
</DataTemplate>
</ItemsControl.ItemTemplate>
</ListView>
Вот вроде бы и всё.
Айфон мало держит заряд, разбираемся с проблемой вместе с AppLab
Перевод документов на английский язык: Важность и ключевые аспекты
Данная ошибка возникает даже после запуска только созданного проекта Xamarin Android в VisualStudio 2017
Можно ли поместить в библеотеку необходимые ресурсы и пользоваться ими без распаковки?
Что произойдет если запустить оба процесса которые описаны ниже: