通用Windows平台控制参数

Had*_*247 1 c# mvvm uwp

如何在没有MVVM框架的情况下在通用Windows平台中创建参数化命令?我试图实现RelayCommand类,但System.Windows.Input命名空间没有CommandManager类.

ven*_*eis 7

如果您不想使用框架,则必须自己实现该接口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>
Run Code Online (Sandbox Code Playgroud)

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();
    }

}
Run Code Online (Sandbox Code Playgroud)

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))
            //...
    }   
}
Run Code Online (Sandbox Code Playgroud)