Проблема с МВВМ. Динамический список сеток - PullRequest
1 голос
/ 25 июня 2010

Не знаю, по данным MVVM показывают данные о контроле.

У меня есть коллекция автомобилей.

Я хочу сгруппировать их по типу (например, седан, комби, хэтчбек)и зависит от количества типов печатных сеток.

Итак:

5 автомобилей: 2 x седан, 2 x Combi, 1 x sportcar.

Итак, я хочу напечатать 3сетки.

Как это сделать с MVVM.

1 Ответ

3 голосов
/ 25 июня 2010

Ниже приведен пример кода.Если ваши списки автомобилей могут измениться, вы должны вместо этого использовать ObservableCollections или реализовать INotifyPropertyChanged в своей модели представления.XAML:

<Window x:Class="TestApp.Window2"
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
    Height="300" Width="300">
    <Grid>
        <ListBox ItemsSource="{Binding Path=CarTypes}">
            <ListBox.ItemTemplate>
                <DataTemplate>
                    <StackPanel>
                        <TextBlock Text="{Binding Path=Key}" />
                        <ListBox ItemsSource="{Binding Path=Value}" DisplayMemberPath="Name" />
                    </StackPanel>
                </DataTemplate>
            </ListBox.ItemTemplate>
            <ListBox.ItemsPanel>
                <ItemsPanelTemplate>
                    <StackPanel Orientation="Horizontal" />
                </ItemsPanelTemplate>
            </ListBox.ItemsPanel>
        </ListBox>
    </Grid>
</Window>

Код:

using System.Collections.Generic;
using System.Windows;

namespace TestApp
{
    public partial class Window2 : Window
    {
        public Window2()
        {
            InitializeComponent();

            DataContext = new CarsVM();
        }
    }

    public class CarsVM
    {
        public CarsVM()
        {
            CarTypes = new Dictionary<string, List<Car>>();

            // You want to populate CarTypes from some model.
            CarTypes["sedan"] = new List<Car>() {new Car("Honda Accord"), new Car("Toyota Camry")};
            CarTypes["musclecar"] = new List<Car>() { new Car("Chevy Camaro"), new Car("Dodge Challenger") };
            CarTypes["suv"] = new List<Car>() { new Car("Chevy Tahoe") };
        }

        public Dictionary<string, List<Car>> CarTypes { get; private set; } 
    }

    public class Car
    {
        public Car(string name)
        {
            Name = name;
        }
        public string Name { get; set; }
    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...