我的视图包含以下2个按钮:
<StackPanel Grid.Row="0" Orientation="Horizontal" HorizontalAlignment="Center" VerticalAlignment="Center">
<Button Content="Start" Width="100" Height="30" Margin="20" Command="{Binding OkCommand}"/>
<Button Content="Cancel" Width="100" Height="30" Margin="20" Command="{Binding CancelCommand}"/>
</StackPanel>
在我的VM中 - 我有命令拦截设置。
class StockViewModel
{
#region Properties
public ICommand OkCommand { get; set; }
public ICommand CancelCommand { get; set; }
#endregion
#region Constructor
public StockViewModel()
{
OkCommand = new myCommand(myOkExecute, myCanOkExecute);
CancelCommand = new myCommand(myCancelExecute, myCanCancelExecute);
}
#endregion
private void myOkExecute (object parameter)
{
......
}
private bool myCanOkExecute(object parameter)
{
........
}
private bool myCanCancelExecute(object parameter)
{
.......
}
private myCanCancelExecute(object parameter)
{
............
}
#endregion
public class myCommand : ICommand
{
}
问题:我希望按钮的行为是对话 - 意味着当单击一个(提交)时,另一个应该被禁用,反之亦然。当表单第一次加载时 - 默认情况下启用提交btn。
我尝试了多种方式 - 但似乎无法实现这一点。
我在这里做普通的MVVM代码 - 没有prism / event聚合器概念。
人们可以推荐(使用代码)这样的命令bheavior一般如何处理。
答案 0 :(得分:3)
private bool IsOkToExecute
{
get { return _isOkToExecute; }
set
{
_isOkToExecute = value;
RaisePropertyChanged("IsOkToExecute");
}
}
private void myOkExecute (object parameter)
{
IsOkToExecute = false;
}
private void myCancelExecute(object parameter)
{
IsOkToExecute = true;
}
private bool myCanOkExecute(object parameter)
{
return IsOkToExecute;
}
private bool myCanCancelExecute(object parameter)
{
return !IsOkToExecute;
}