UWP MVVM点击绑定到功能
本文关键字:功能 绑定 MVVM UWP | 更新日期: 2023-09-27 18:00:11
这可能是世界上最容易做的事情,但我有点挣扎。
我在XAML中有这个:
<Button Name="browseButton" Content="Browse" Grid.Column="1" />
从视图到视图模型,我已经正确地绑定了所有内容,比如单选按钮和输入文本框等……但我想要的是将这个按钮绑定到一个函数,这样当用户单击它时,就会发生一些操作。
但我真的很难弄清楚如何将单击此按钮绑定到视图模型中的函数。我在ICommand上玩了一点,没有走多远,我不想做那种把它粘在后面代码里的黑客行为。
如果有帮助的话,我会使用MVVMLight(Galasoft)。
感谢任何指导。
编辑
遵循中的示例https://msdn.microsoft.com/en-us/magazine/dn237302.aspx我有,但canExecuteMyCommand
是从哪里来的?我如何在XAML中绑定它?
public RelayCommand BrowseCommand
{
get;
private set;
}
public LoadFilesViewModel()
{
BrowseCommand = new RelayCommand(executeBrowse, () => _canExecuteMyCommand);
}
private void executeBrowse()
{
// Do something
}
解决方案
<Button Name="browseButton" Content="Browse" Grid.Column="1" Command="{Binding BrowseCommand}" />
和
public RelayCommand BrowseCommand
{
get;
private set;
}
public LoadFilesViewModel()
{
BrowseCommand = new RelayCommand(executeBrowse, () => true);
}
private void executeBrowse()
{
// Do something
}
如果查看您提供的代码,RelayCommand
构造函数带有2个参数。
public RelayCommand BrowseCommand
{
get;
private set;
}
public LoadFilesViewModel()
{
BrowseCommand = new RelayCommand(executeBrowse, () => _canExecuteMyCommand);
}
private void executeBrowse()
{
// Do something
}
检查源代码(这就是学习代码库和开源使之成为可能)或Visual Studio IntelliSense,你会看到这个签名:
public RelayCommand(Action execute, Func<bool> canExecute)
因此,第一个参数是要执行的操作,第二个参数是检查它是否可以执行。您已经正确地将executeBrowse
标识为"做某事"的方法。_canExecuteMyCommand
参数是bool
类型的类变量,它可以是true或false(在其他地方设置)。
在您自己的解决方案(有问题的发布)中,您将其替换为true(硬编码)。注意,在这种情况下,您也可以删除第二个参数:
public LoadFilesViewModel()
{
BrowseCommand = new RelayCommand(executeBrowse); // will always execute
}
奖金
请注意,您也可以使用一个方法来定义该方法是否可以执行,而不是使用局部变量(或者使用委托语法内联编写检查逻辑)。
public LoadFilesViewModel()
{
BrowseCommand = new RelayCommand(ExecuteBrowse, CanExecuteBrowse);
}
private void ExecuteBrowse()
{
// Do something
}
private bool CanExecuteBrowse()
{
// Check if we are allowed to browser
return true; // or false :)
}