MVVM中的Silverlight多命令绑定

MVVM中的Silverlight多命令绑定,mvvm,silverlight-4.0,icommand,Mvvm,Silverlight 4.0,Icommand,我开始使用MVVM构建Silverlight应用程序。 我在XAML页面上有一个按钮,可以在点击时保存数据。我编写了以下代码 <Button Content="Save" Grid.Column="2" Grid.Row="3" Command="{Binding Path=SaveCourse}"/> 哪种方式适用于我的save命令。 我的问题是,如果页面上有多个按钮,那么我是否必须为每个按钮编写与上面相同的代码? 有谁能提出更好的方法吗

我开始使用MVVM构建Silverlight应用程序。 我在XAML页面上有一个按钮,可以在点击时保存数据。我编写了以下代码

 <Button Content="Save" Grid.Column="2" Grid.Row="3"
                    Command="{Binding Path=SaveCourse}"/>
哪种方式适用于我的save命令。 我的问题是,如果页面上有多个按钮,那么我是否必须为每个按钮编写与上面相同的代码?
有谁能提出更好的方法吗?

微软的模式与实践团队提供了一个名为Prism的库,它在某种程度上简化了这一过程

它们提供了一个名为
DelegateCommand
的类,该类实现了
ICommand
,并允许您传递希望执行的方法名

public class Test {
    public Test(){
        SomeCommand = new DelegateCommand<object>(DoSomething);
    }
    public DelegateCommand<object> SomeCommand { get; private set;}
    private void DoSomething(object parameter){
        //Do some stuff
    }
}

微软的模式与实践团队提供了一个名为Prism的库,它在某种程度上简化了这一过程

它们提供了一个名为
DelegateCommand
的类,该类实现了
ICommand
,并允许您传递希望执行的方法名

public class Test {
    public Test(){
        SomeCommand = new DelegateCommand<object>(DoSomething);
    }
    public DelegateCommand<object> SomeCommand { get; private set;}
    private void DoSomething(object parameter){
        //Do some stuff
    }
}

顺便说一句,所有代码都来自内存,显然if语句不会编译,但应该非常接近。感谢Adam将尝试您的解决方案。顺便说一句,所有代码都来自内存,显然if语句不会编译,但应该非常接近。感谢Adam将尝试您的解决方案。
public class Test {
    public Test(){
        SomeCommand = new DelegateCommand<object>(DoSomething, (enabled) => CanSave());
    }
    public DelegateCommand<object> SomeCommand { get; private set;}
    private void DoSomething(object parameter){
        //Do some stuff
    }
    private bool CanSave(){
        if(/*test if the control should be enabled */)
            return true;
        else
            return false;
    }
    private void DoABunchOfStuff(){
        //something here means the control should be disabled
        SomeCommand.RaiseCanExecuteChanged();
    }
}