Есть несколько гридов. Все они скрыты до тех пор пока в 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
XAML (я тут показываю простой случай, с одинаковым лэйаутом для гридов):
Результат:
Заметьте, что SelectedItem="{Binding SelectedItem}" нужно лишь затем, чтобы сделать начальное значение в комбобоксе пустым. Больше это значение в коде не используется (хотя оно может вам понадобиться ещё где-нибудь в VM).
Комментариев нет:
Отправить комментарий