【问题标题】:Universal Windows Platform commanding with parameters [closed]带有参数的通用 Windows 平台命令 [关闭]
【发布时间】:2016-01-05 07:59:24
【问题描述】:

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

【问题讨论】:

  • 欢迎使用 Stack Overflow。你能把你的问题说得更清楚吗?你试过什么?确切的错误信息是什么?
  • 使用Template10 没有必要重新发明轮子

标签: c# mvvm uwp


【解决方案1】:

如果你不想使用框架,你必须自己实现接口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))
            //...
    }   
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2020-03-01
    • 1970-01-01
    • 1970-01-01
    • 2014-04-12
    • 2014-07-21
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多