注:私自身のビューモデルを使用したいので、この質問はWPF - How can I create menu and submenus using bindingとは異なります。 MyFirstViewModel、MySecondViewModel、MyThirdViewModelは、ある種類のMenuItemViewModelでマージすることはできません。これらの3つのビューモデルを使用したレイヤリングは私の問題です。階層型のdatatemplateについての答えは私のためには機能しません。wpf:ネストされたメニュー項目のバインド
私は3つのレベルがあることを知っているメニューを作りたいと思います。
- 第一レベルは第二レベルは私のビューモデルにのObservableCollection < MySecondViewModel>への結合から生成されるものの静的メニュー項目
- あります。
- MySecondViewModelではまた、私は私の第三のメニュー項目レベルにバインドするのObservableCollection < MyThirdViewModel>を持っています。私もまた、MyThirdViewModelのプロパティにバインドされたチェックボックスでテンプレートを使用する第3レベルで
。だから私のViewModelsはこのようになります:
public class MyFirstViewModel
{
public ObservableCollection<MySecondViewModel> MenuItemsSecondLevel { get; set; }
...
}
public class MySecondViewModel
{
public string DisplayName{get; set;}
public ObservableCollection<MyThirdViewModel> MenuItemsThirdLevel{ get; set; }
...
}
public class MyThirdViewModel
{
public string DisplayName{get; set;}
public bool IsChecked {get;set;}
...
}
これに基づいて自分のWPFメニューを作成するにはどうすればよいですか?私がこれを試してみると:
<Menu>
<MenuItem Header="Select Source:" ItemsSource="{Binding MenuItemsSecondLevel}">
<MenuItem Header="{Binding DisplayName}" ItemsSource="{Binding MenuItemsThirdLevel}" >
<MenuItem.ItemTemplate>
<DataTemplate>
<CheckBox Content="{Binding DisplayName}" IsChecked="{Binding IsChecked}"/>
</DataTemplate>
</MenuItem.ItemTemplate>
</MenuItem>
</MenuItem>
</Menu>
私のバインディングは機能しません。彼は、私はこのようなことが、より高度にする私のCollections.Ifのいずれかを見つけることができません。
<Menu>
<MenuItem Header="Select Source:" ItemsSource="{Binding MenuItemsSecondLevel}">
<MenuItem.ItemTemplate>
<DataTemplate>
<MenuItem Header="{Binding DisplayName}" ItemsSource="{Binding MenuItemsThirdLevel}" >
<MenuItem.ItemTemplate>
<DataTemplate>
<CheckBox Content="{Binding DisplayName}" IsChecked="{Binding IsChecked}" />
</DataTemplate>
</MenuItem.ItemTemplate>
</MenuItem>
</DataTemplate>
</MenuItem.ItemTemplate>
</MenuItem>
</Menu>
彼は、第二のレベルではなく、三分の一を見つけます。私のビューモデルの構造のように、メニューレベルを作成する最善の方法は何ですか?
メニュー項目を選択可能にすることができますが、ここではチェックボックスを使用する理由があります。
'MenuItem'から派生した新しいクラスを作ることでカスタム' MenuItem'を作ってみましたか? – lightlike
いいえ、私はあなたがそれが助けると思いますか?どのように私の問題を解決することができますか? – Nelly
ああごめんなさい。私はあなたの問題を誤解したと思います。 ViewModelに 'INotifyPropertyChanged'を実装してみることができますか? UIが既に読み込んだ後で、 'ObservableCollection'を設定している可能性があります。 – lightlike