C# wpf mvvm灯光菜单项单击事件命令
我有以下问题。我已为菜单和菜单项创建了usercontrol: UserControl将viewmodel作为Datacontext激发,而view模型的构造函数将激发并调用模型中的ReylayCommand。单击视图中的菜单项时。然后什么也没发生。我错过了什么 我的xaml: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 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()
{
}
}
}