Universal Windows 带参数的平台命令
Universal Windows Platform commanding with parameters
如何在没有 MVVM 框架的情况下在通用 Windows 平台中创建参数化命令?我试图实现 RelayCommand class,但是 System.Windows.Input 命名空间没有 CommandManager class.
如果不想使用框架,则必须自己实现接口System.Windows.Input.ICommand
。
命令参数可以通过属性CommandParameter
传递。不需要命令管理器。如果您对参数使用单向绑定,则当绑定更改时,按钮将自动启用/禁用。对于其他任何事情,请引发事件 CanExecuteChanged
.
当然,在更高级的情况下,您还必须为命令实现一些状态管理,如果命令在视图模型中定义或使用某种自实现的命令,这会更容易经理。
简化示例
这里是一个简化的示例,说明如何使用具有 x:Bind
绑定的按钮。不需要视图模型或命令管理器。
Example.xaml:
<Button x:Name="Test" Command="{x:Bind FirstCommand}" CommandParameter="{x:Bind SelectedItem, Mode=OneWay">
<TextBlock>Test</TextBlock>
</Button>
Example.xaml.cs:
public sealed partial class Example : Page {
public SampleCommand FirstCommand { get; set; } =
new SampleCommand();
public object SelectedItem { get; set; }
public StandardProjectList() {
this.InitializeComponent();
}
}
SampleCommand.cs:
public class SampleCommand : ICommand {
public event EventHandler CanExecuteChanged;
public bool CanExecute(object parameter) {
return parameter != null;
}
public void Execute(object parameter) {
if (CanExecute(parameter))
//...
}
}
如何在没有 MVVM 框架的情况下在通用 Windows 平台中创建参数化命令?我试图实现 RelayCommand class,但是 System.Windows.Input 命名空间没有 CommandManager class.
如果不想使用框架,则必须自己实现接口System.Windows.Input.ICommand
。
命令参数可以通过属性CommandParameter
传递。不需要命令管理器。如果您对参数使用单向绑定,则当绑定更改时,按钮将自动启用/禁用。对于其他任何事情,请引发事件 CanExecuteChanged
.
当然,在更高级的情况下,您还必须为命令实现一些状态管理,如果命令在视图模型中定义或使用某种自实现的命令,这会更容易经理。
简化示例
这里是一个简化的示例,说明如何使用具有 x:Bind
绑定的按钮。不需要视图模型或命令管理器。
Example.xaml:
<Button x:Name="Test" Command="{x:Bind FirstCommand}" CommandParameter="{x:Bind SelectedItem, Mode=OneWay">
<TextBlock>Test</TextBlock>
</Button>
Example.xaml.cs:
public sealed partial class Example : Page {
public SampleCommand FirstCommand { get; set; } =
new SampleCommand();
public object SelectedItem { get; set; }
public StandardProjectList() {
this.InitializeComponent();
}
}
SampleCommand.cs:
public class SampleCommand : ICommand {
public event EventHandler CanExecuteChanged;
public bool CanExecute(object parameter) {
return parameter != null;
}
public void Execute(object parameter) {
if (CanExecute(parameter))
//...
}
}