如何将命令绑定到XAML中的WPF Telerik radMenuItem?

时间:2017-02-10 01:16:45

标签: c# wpf xaml mvvm telerik

我正在使用Telerik控件库构建.Net WPF应用程序 我的仪表板有几个我实施的菜单 我正在尝试使用MVVM模型。

我的菜单项的类定义(在MVVM中)如下所示:

public class MenuItemVM : MenuVM
{    
    public enum MenuItemTypes : uint
    {   
         Link,
         SpecialLink,
         TopLevel,
         TopLevelWithDropDown,
         TopLevelImage,
         TopLevelSection,
         Title,
         Item,
         Footer,
         Separator,
         Paragraph,
         Gallery,
         Image
    };

    public string Name { get; set; }
    public string Content { get; set; }
    public MenuItemTypes Type { get; set; }
    private bool isSeparator = false;

    public bool IsSeparator
    {
      get { return isSeparator; }
      set { isSeparator = value;}
    }
    public ICommand Command { get; set; }
}

XAML中菜单的定义如下所示:

telerik:RadMenu Grid.Column="0" 
Name="MainMenu" 
Orientation="Vertical" 
Margin="10,30,0,20"
Style="{StaticResource MainMenuStyle}" 
Height="1200"
ItemsSource="{StaticResource MainMenuItemsSource}" 
ItemContainerStyleSelector="{StaticResource MainMenuItemStyleSelector}" 
ItemContainerStyle="{x:Null}" 

我的ViewModel在Windows.Resources XAML中定义:

<viewModel:MenuVM x:Key="MainMenuItemsSource">  
    <viewModel:MenuItemVM Name="Test1" Content="Do Test 1" Type="Item" Command="??"/>
    <viewModel:MenuItemVM Name="Test2" Content="Do Test 2" Type="Item" Command="??"/> 
    <viewModel:MenuItemVM Name="Test3" Content="Do Test 3" Type="Item" Command="??"/>
</viewModel:MenuVM>

我正在使用“Style”和“ControlTemplate”来定义菜单控件的布局。

我有一个简单的命令,我正在尝试绑定到菜单项。

namespace SampleApp.Commands
{
    public class CommandTest : ICommand
    {
        public event EventHandler CanExecuteChanged;
        public bool CanExecute(object parameter)
        {
            return true;
        }
        public void Execute(object parameter)
        {
            MessageBox.Show("Command Clicked!!!");
        }
    }
}

菜单显示正确。

我无法弄清楚如何将命令绑定到菜单定义中的菜单项。

1 个答案:

答案 0 :(得分:0)

Command个对象的MenuItemVM属性设置为CommandTest类的实例:

<viewModel:MenuVM x:Key="MainMenuItemsSource" xmlns:commands="clr-namespace:SampleApp.Commands">
    <viewModel:MenuItemVM Name="Test1" Content="Do Test 1" Type="Item">
        <viewModel:MenuItemVM.Command>
            <commands:CommandTest />
        </viewModel:MenuItemVM.Command>
    </viewModel:MenuItemVM>
    <viewModel:MenuItemVM Name="Test2" Content="Do Test 2" Type="Item">
        <viewModel:MenuItemVM.Command>
            <commands:CommandTest />
        </viewModel:MenuItemVM.Command>
    </viewModel:MenuItemVM>
    <viewModel:MenuItemVM Name="Test3" Content="Do Test 3" Type="Item">
        <viewModel:MenuItemVM.Command>
            <commands:CommandTest />
        </viewModel:MenuItemVM.Command>
    </viewModel:MenuItemVM>
</viewModel:MenuVM>

并将Command容器的RadMenuItem属性绑定到每个Command的{​​{1}}源属性:

MenuItemVM