Q: Как создать плиточное меню WPF Есть страница разделенная Grid'ом. Нужно в одну ячейку поместить динамически созданные элементы управления (кнопки в виде плиток), причем используя условие.
Если сomboBox.SelectedItem = ... , то создать определенное количество элементов.
Если значение сomboBox.SelectedItem изменилось, то удалить элементы управления, и создать новые. Количество зависит от того, что будет выбрано в comboBox.
Как пример, вот такое меню:


A: Окей, смотрите, что должно быть.
Для начала, 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>

Вот вроде бы и всё.
