【发布时间】:2015-11-13 01:30:38
【问题描述】:
ICommand:
public class CMDAddEditUser : ICommand
{
public event EventHandler CanExecuteChanged;
public VMAddEditUser ViewModel { get; set;}
public CMDAddEditUser()
{
}
public CMDAddEditUser(VMAddEditUser vm)
{
ViewModel = vm;
}
public bool CanExecute(object parameter)
{
return true;
}
public void Execute(object parameter)
{
this.ViewModel.SimpleMethod();
}
}
视图模型:
public class VMAddEditUser
{
private Employee _employee = new Employee();
private CMDAddEditUser Command { get; set; }
public VMAddEditUser()
{
Command = new CMDAddEditUser(this);
}
public string txtFirstName
{
get { return _employee.FirstName; }
set { _employee.FirstName = value; }
}
public void SimpleMethod()
{
txtFirstName = "abc";
}
}
XAML:
<Window x:Class="WPF.AddEditUserView"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:vm="clr-namespace:ViewModel;assembly=ViewModel"
Title="AddEditUserView" Height="392.329" Width="534.143">
<Grid Margin="0,0,2,-3">
<Grid.Resources>
<vm:VMAddEditUser x:Key="abx"/>
</Grid.Resources>
<Grid.DataContext>
<vm:VMAddEditUser/>
</Grid.DataContext>
<Button x:Name="btn" Content="Cancel" Command="{Binding SimpleMethod, Source={StaticResource abx}}"/>
</Grid>
</Window>
CMDAddEditUser 和 VMAddEditUser 在同一个项目中,而 xaml 在不同的项目中。
ICommand 的.Execute(Object Parameter) 似乎不起作用。我无法将 SimpleMethod 与我拥有的按钮绑定。当我在 xaml 文件中键入命令绑定时,自动完成/建议仅显示 txtFirstName 而不是 SimpleMethod。我想不通为什么 SimpleMethod 不能绑定也找不到。我在这段代码中做错了什么?
【问题讨论】:
-
SimpleMethod 不是命令。那是您的
Command属性。它应该是公开的,并且绑定应该是Command="{Binding Command, ...}"。 -
您的 Icommand 属性是私有的。将其公开并与之绑定。
标签: c# wpf mvvm binding icommand