【发布时间】:2018-06-21 07:14:44
【问题描述】:
我的第一个问题来了。
在带有 MVVM Light 的 UWP 应用程序中,我尝试使用枚举参数定义 仅一个 命令,以响应视图中的所有按钮交互。但是按钮仍处于禁用状态且无响应。
我已经为命令定义了参数
public enum ButtonKey
{
Connect = 0,
Disconnect = 1
}
然后由 MainViewModel 类使用
public class MainViewModel : ViewModelBase
{
RelayCommand<ButtonKey> buttonPressed;
public RelayCommand<ButtonKey> ButtonPressed
{
get => buttonPressed;
set => buttonPressed = value;
}
public MainViewModel()
{
buttonPressed = new RelayCommand<ButtonKey> (ButtonPressed_Execute, ButtonPressed_CanExecute);
}
bool ButtonPressed_CanExecute(ButtonKey arg)
{
bool retValue = false;
switch (arg)
{
// The following conditions are just for testing
case ButtonKey.Connect:
retValue = true;
break;
case ButtonKey.Disconnect:
retValue = false;
break;
}
return retValue;
}
void ButtonPressed_Execute(ButtonKey obj)
{
// another switch() case:
}
}
那么xaml代码如下:
<CommandBar>
<AppBarButton Label="Connect" Command="{Binding ButtonPressed}">
<AppBarButton.CommandParameter>
<viewModel:ButtonKey>Connect</viewModel:ButtonKey>
</AppBarButton.CommandParameter>
</AppBarButton>
<AppBarButton Label="Disconnect" Command="{Binding ButtonPressed}">
<AppBarButton.CommandParameter>
<viewModel:ButtonKey>Disconnect</viewModel:ButtonKey>
</AppBarButton.CommandParameter>
</AppBarButton>
即使在MainViewModel 构造函数中调用buttonPressed.RaiseCanExecuteChanged(),也不会调用ButtonPressed_CanExecute(ButtonKey arg) 方法。
我认为这一切都是由用作命令参数的枚举类型引起的,但我不知道为什么。任何帮助将不胜感激。
【问题讨论】:
标签: mvvm enums uwp mvvm-light uwp-xaml