監視可能なコレクションから MVVM を使用して動的なメニュー項目を作成しようとしています。すべてが機能しましたが、最後に「新規追加」ボタンを追加する必要がありました。次のように、CompositeCollection を使用して解決策を見つけました。
MenuItem を動的にバインドして静的に追加するにはどうすればよいですか?
そのため、TimeSpans が ViewModel のコレクションである次のコードがあります。
<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 のコレクションであるため、複合コレクションが理にかなっているためだと思われます。私はViewModelとMenuItemを混在させていますが。
XAML で ViewModels から作成されたメニュー項目のコレクションを作成してバインドできるようにする方法はありますか?