Поскольку я сбиваю все больше и больше связанных с MVVM проблем с моим текущим приложением, больше просто продолжайте выскакивать. :)Применение MVVM к элементу управления ItemsControl, заполненному UserControls
Текущая реализация, которую я пытаюсь заменить, включает в себя StackPanel, чьи дети более или менее динамически генерируются (через просмотр в файле конфигурации). Каждый ребенок является экземпляром UserControl. Раньше я назначал имя StackPanel, а затем в обработчике событий Window_Loaded я просто определял необходимое количество детей, создавал экземпляр одного UserControl для каждого, а также назначал UserControl ID, чтобы я знал правильный источник для кнопок, нажатых на конкретный экземпляр UserControl; каждый UserControl имеет на нем 3 кнопки.
Так что я знаю, что хочу привязать StackPanel к коллекции. Это, конечно, невозможно, поскольку мне нужно использовать что-то, что происходит от ItemsControl, например ListBox или ListView (или даже самого элемента ItemsControl). Чтобы упростить работу на первой итерации MVVM-ifying, я просто использую ListBox.
Теперь вопрос в том, должен ли мой ObservableCollection в кодировке быть ObservableCollection? Я считаю, что это означает, что независимо от того, как я обмениваюсь своим графическим интерфейсом, у этого ListBox всегда будут дети, которые выглядят, но они делают это в файле XAML MyUserControl. Я бы хотел, чтобы это было настраиваемо, но я предполагаю, что это означает, что я должен применить шаблон MVVM к UserControl.
Мне не нужно, чтобы каждый ListItem имел другой шаблон, но я определенно хочу придерживаться стиля MVVM. Оказывается, я не могу делать все, что я предложил, так как этот UserControl уже ссылается на ViewModel, и поэтому я получаю круговую ссылку. Я дам, что ViewModel подходит к выстрелу и посмотрит, где он меня принимает. Благодаря! – Dave
Да. Каждый элемент может быть отдельным классом ViewModel, что означает, что он получит свой собственный шаблон (если у вас есть настройка DataTemplate для каждого ViewModel, чтобы сопоставить его с соответствующим представлением). Это может быть отдельный UserControl. Я делаю это все время - это в основном делает его списком виртуальных машин, полностью отделенным от представлений - чистым MVVM :) –
Я ушел в сторону, просто пытаясь помочь кому-то в форуме Expression Blend, но я собираюсь изучить этот метод «привязки» виртуальной машины к V с использованием DataTemplates. Это не то, что я делал раньше, или даже слышал. Мне просто нравится пытаться применить MVVM - я нахожу, что я изучаю намного больше о WPF через этот процесс! Благодарим за ваше предложение! – Dave