在Silverlight中选择EdItem changed和Command

在Silverlight中选择EdItem changed和Command,silverlight,silverlight-4.0,command,Silverlight,Silverlight 4.0,Command,我是Silverlight的新手,在命令方面有一些问题。我有一个DataGrid,它绑定到我的ViewModel中的ObservableCollection。我还有一个按钮 <Button Command="{Binding AddCommand}">Add</Button> 问题是CommandBinding似乎对SelectedItem的更改没有反应。如果我运行我的应用程序,没有选择任何网格行,我可以看到CanAdd函数被调用。但是,如果我单击某个项目,则不会调用添

我是Silverlight的新手,在命令方面有一些问题。我有一个DataGrid,它绑定到我的ViewModel中的ObservableCollection。我还有一个按钮

<Button Command="{Binding AddCommand}">Add</Button>
问题是CommandBinding似乎对SelectedItem的更改没有反应。如果我运行我的应用程序,没有选择任何网格行,我可以看到CanAdd函数被调用。但是,如果我单击某个项目,则不会调用添加函数-尽管我可以看到视图模型中的属性SelectedItem已更改??我做错了什么? 是否可以在不使用外部库的情况下使用命令? 我曾经在WPF中编写类似的代码,但是在我使用的GenericCommand类中的WPF中

 public event EventHandler CanExecuteChanged
        {
            add
            {
                CommandManager.RequerySuggested += value;
            }
            remove
            {
                CommandManager.RequerySuggested -= value;
            }
        }

问题是Silverlight中没有CommandManager这样的东西。

您的ViewModel需要实现INotifyDataErrorInfo接口。此外,CanAdd方法需要更改为类似这样的内容

if (SelectedItem == null)
{
     base.AddValidationErrorMessage("SelectedItem", "Select something....");
     return false;
}
else
{
     base.RemoveValidationErrorMessage("SelectedItem");
     return true;
 }
再看看这些文章,我想你会发现它们很有帮助

 public event EventHandler CanExecuteChanged
        {
            add
            {
                CommandManager.RequerySuggested += value;
            }
            remove
            {
                CommandManager.RequerySuggested -= value;
            }
        }
if (SelectedItem == null)
{
     base.AddValidationErrorMessage("SelectedItem", "Select something....");
     return false;
}
else
{
     base.RemoveValidationErrorMessage("SelectedItem");
     return true;
 }