我有一个WPF应用程序,带有一个绑定到MessageCommand
的按钮。为了简单起见,该应用程序只有一个按钮,该按钮应显示一个消息框。但是,当我单击按钮时,什么也没有发生。我正在按照CodeProject的说明进行操作,但是尽管有很多关于此主题的问题和答案,但我不知道我缺少什么。
XAML文件:
<Window x:Class="CommandTestProject.MainWindow"
...
xmlns:local="clr-namespace:CommandTestProject"
xmlns:vw="clr-namespace:CommandTestProject.ViewModel"
mc:Ignorable="d"
Title="MainWindow" Height="450" Width="800">
<Window.DataContext>
<vw:ViewModelMsg/>
</Window.DataContext>
<Grid>
<Button Content="Click"
Command="{Binding Path=MessageCommand}"/>
</Grid>
</Window>
ViewModel类:
using CommandTestProject.Commands;
using System;
using System.Windows;
using System.Windows.Input;
namespace CommandTestProject.ViewModel
{
public class ViewModelMsg
{
private ShowMessage showMsg;
public ViewModelMsg()
{
showMsg = new ShowMessage(this);
}
internal ICommand MessageCommand
{
get
{
return showMsg;
}
}
internal void Message()
{
MessageBox.Show("This is a test command!");
}
}
}
ShowMessage
类:
using CommandTestProject.ViewModel;
using System;
using System.Windows.Input;
namespace CommandTestProject.Commands
{
public class ShowMessage : ICommand
{
private ViewModelMsg viewModel;
public event EventHandler CanExecuteChanged;
public ShowMessage(ViewModelMsg vm)
{
viewModel = vm;
}
public bool CanExecute(object parameter)
{
return true;
}
public void Execute(object parameter)
{
viewModel.Message();
}
}
}
在您的视图模型中,将internal ICommand MessageCommand
更改为public ICommand MessageCommand
,它将起作用。绑定到内部属性将不起作用,因为绑定是由位于单独程序集中的绑定引擎(PresentationFramework.dll)解析的。