Я пытаюсь использовать динамический элемент меню, используя MVVM из наблюдаемой коллекции. Все сработало, но потом мне нужно было добавить кнопку «добавить новую» в конец. Я нашел решение, используя CompositeCollection, как здесь:Динамическое связывание и статическое добавление MenuItems - с использованием представления Модели/MVVM
How do I dynamically bind and statically add MenuItems?
Так есть следующий код, где TimeSpans представляет собой набор ViewModels:
<MenuItem Header="Time Ranges">
<MenuItem.ItemsSource>
<CompositeCollection>
<CollectionContainer Collection="{Binding TimeSpans}" />
<Separator />
<MenuItem Header="Add New" cal:Message.Attach="NewTimeSpan()" />
</CompositeCollection>
</MenuItem.ItemsSource>
<MenuItem.ItemTemplate>
<ItemContainerTemplate>
<MenuItem Header="{Binding Name}" cal:Message.Attach="ConfigureTimeSpan()" />
</ItemContainerTemplate>
</MenuItem.ItemTemplate>
</MenuItem>
Однако модели ракурса не заселена, как это было только с помощью ItemsSource = "{Binding TimeSpans}", он не показывает ничего:
Я подозреваю, что это потому, что я в ответе StackOverflow выше привязки - это, фактически, коллекция MenuItems, так что составная коллекция имеет смысл. В то время как минные миксы ViewModels & MenuItems.
Есть ли способ построить коллекцию элементов меню, созданных из ViewModels в XAML, чтобы я мог ее связать?
Вы пробовали это? '
Кажется, придумал тот же результат. Я обновляю xaml в вопросе, хотя, поскольку вы правы, я полностью пропустил это в другом ответе. Благодарю. – Joe
Ах! Понял. Путь должен быть DataContext.TimeSpans, так как {Binding TimeSpans} является короткой средой для рамки Caliburn.Micro MVVM, которую я использую. Большое спасибо! – Joe