Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/wpf/12.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# wpf mvvm灯光菜单项单击事件命令_C#_Wpf_Mvvm - Fatal编程技术网

C# wpf mvvm灯光菜单项单击事件命令

C# wpf mvvm灯光菜单项单击事件命令,c#,wpf,mvvm,C#,Wpf,Mvvm,我有以下问题。我已为菜单和菜单项创建了usercontrol: UserControl将viewmodel作为Datacontext激发,而view模型的构造函数将激发并调用模型中的ReylayCommand。单击视图中的菜单项时。然后什么也没发生。我错过了什么 我的xaml: <UserControl x:Class="TestDashBoard.Views.MenuItemView" xmlns="http://schemas.microsoft.com/wi

我有以下问题。我已为菜单和菜单项创建了usercontrol:

UserControl将viewmodel作为Datacontext激发,而view模型的构造函数将激发并调用模型中的ReylayCommand。单击视图中的菜单项时。然后什么也没发生。我错过了什么

我的xaml:

<UserControl x:Class="TestDashBoard.Views.MenuItemView"
             xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
             xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
             xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006" 
             xmlns:d="http://schemas.microsoft.com/expression/blend/2008" 
             xmlns:prop="clr-namespace:TestDashBoard.Properties"
             xmlns:i="clr namespace:System.Windows.Interactivity;assembly=System.Windows.Interactivity"
             xmlns:cmd="clr-namespace:GalaSoft.MvvmLight.Command;assembly=GalaSoft.MvvmLight.Extras.WPF4"
             mc:Ignorable="d" >
    <Menu IsMainMenu="True">
        <MenuItem Header="{x:Static prop:Resources.Setup}">
            <MenuItem x:Name="salesSetup" Header="{x:Static prop:Resources.SaleSetup}">
                <i:Interaction.Triggers>
                    <i:EventTrigger EventName="Click">
                        <cmd:EventToCommand Command="{Binding SalesSetupClicked, Mode=OneWay}" />
                    </i:EventTrigger>
                </i:Interaction.Triggers>
            </MenuItem>
        </MenuItem>
    </Menu>    
</UserControl>

尝试在ViewModel中执行此操作:

使用GalaSoft.MvvmLight; 使用GalaSoft.MvvmLight.Command

namespace TestDashBoard.ViewModels
{
    public class MenuItemViewModel : ViewModelBase
    {

        public RelayCommand _salesSetupClicked;

        public RelayCommand SalesSetupClicked
        {
            get
            {
               if (_salesSetupClicked == null)
                  _salesSetupClicked = new RelayCommand(ShowSalesSetup);
               return _salesSetupClicked;
            };
            private set;
        }
        public RelayCommand InvtSetupClicked 
        { 
            get; 
            private set; 
        }

        public MenuItemViewModel()
        {
            SalesSetupClicked = new RelayCommand(() => 
            {
                ShowSalesSetup();
            });

            InvtSetupClicked = new RelayCommand(() =>
            {
                ShowInvtSetup();
            });
        }

        private void ShowSalesSetup()
        {
        }
        private void ShowInvtSetup()
        {
        }
    }
}

尝试将您希望的代码放入构造函数,而不是某种方法。

不起作用,我得到编译错误。尝试移动if(\u salesSetupClicked==null)\u salesSetupClicked=new RelayCommand(ShowSalesSetup);然后对setter进行编译,但当我单击菜单项时,什么也没有发生。我已经找到了问题的答案。我将usercontrol链接到主视图,并且在usercontrols中有菜单控件。当我将菜单移到主视图中,并将RelayCommand移到主视图模型中时。我很高兴我帮你找到了解决办法!请检查此命令是否与按钮一起正常工作?如果是,则表示将FocusManager.IsFocusScope=“True”属性设置为菜单。您是否在调试模式下检查了命令是否正常工作?按钮是否正常工作。我尝试使用FocusManger.IsFocusable=“True”。不起作用。要么我把它放在菜单中,要么就是我试图点击的菜单项是。它不起作用。我还检查了在调试模式下构造函数是否正在运行。@user2063981您能在出现错误的地方发布代码吗?我已经找到了问题的答案。我将usercontrol链接到主视图,并且在usercontrols中有菜单控件。当我将菜单移到主视图中,并将RelayCommand移到主视图模型中时。那就行了。很好,你找到了解决办法
namespace TestDashBoard.ViewModels
{
    public class MenuItemViewModel : ViewModelBase
    {

        public RelayCommand _salesSetupClicked;

        public RelayCommand SalesSetupClicked
        {
            get
            {
               if (_salesSetupClicked == null)
                  _salesSetupClicked = new RelayCommand(ShowSalesSetup);
               return _salesSetupClicked;
            };
            private set;
        }
        public RelayCommand InvtSetupClicked 
        { 
            get; 
            private set; 
        }

        public MenuItemViewModel()
        {
            SalesSetupClicked = new RelayCommand(() => 
            {
                ShowSalesSetup();
            });

            InvtSetupClicked = new RelayCommand(() =>
            {
                ShowInvtSetup();
            });
        }

        private void ShowSalesSetup()
        {
        }
        private void ShowInvtSetup()
        {
        }
    }
}