Страницы

Поиск по вопросам

вторник, 2 апреля 2019 г.

Привязка к ComboBoxItem

Есть несколько гридов. Все они скрыты до тех пор пока в ComboBoxне выбрано ComboBoxItem. Когда выбираю один из ComboBoxItem должен появиться соответственно один из гридов. Привязку пытаюсь сделать в XAML без вью модели:

Cash это Item в Сombobox но сам грид виден независимо от того выбрано ли что то в боксе вообще. Как исправить это расширение разметки ?


Ответ

Обычно такую задачу решают следующим образом.
У вас есть коллекция VM-объектов, каждый из которых содержит данные для своего грида и строки комбобокса. Вы привязываете это коллекцию к ItemsSource комбобокса, устанавливаете DisplayMemberPath на то, что должно показываться в комбобоксе. Для показа грида вы используете Binding, если все гриды одинаковые и отличаются только данными. Либо ContentPresenter и набор DataTemplate'ов, если они разные.
Пример:
VM-класс:
class ItemVM { public string Header { get; } public string Content { get; } public ItemVM(string header, string сontent) { Header = header; Content = Content; } }
Ну и обёртка для коллекции:
class MainVM { public IEnumerable Items { get; private set; } public ItemVM SelectedItem { get; set; } // ещё нужен конструктор }
XAML (я тут показываю простой случай, с одинаковым лэйаутом для гридов):

Результат:


Заметьте, что SelectedItem="{Binding SelectedItem}" нужно лишь затем, чтобы сделать начальное значение в комбобоксе пустым. Больше это значение в коде не используется (хотя оно может вам понадобиться ещё где-нибудь в VM).

Комментариев нет:

Отправить комментарий