MVVM中的Silverlight多命令绑定
我开始使用MVVM构建Silverlight应用程序。 我在XAML页面上有一个按钮,可以在点击时保存数据。我编写了以下代码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命令。 我的问题是,如果页面上有多个按钮,那么我是否必须为每个按钮编写与上面相同的代码? 有谁能提出更好的方法吗
<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();
}
}