Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/xamarin/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在Xamarin表单中定义命令方法的返回类型&;MVVM_Xamarin_Mvvm_Xamarin.forms - Fatal编程技术网

在Xamarin表单中定义命令方法的返回类型&;MVVM

在Xamarin表单中定义命令方法的返回类型&;MVVM,xamarin,mvvm,xamarin.forms,Xamarin,Mvvm,Xamarin.forms,我想为一个方法定义一个返回类型,该方法与我的命令关联,该命令在单击按钮时执行。比如说, 点击按钮 this.Detail = ViewModel.MasterItemSelectedCommand.Execute(seleteditem); 在模型构造函数中 MasterItemSelectedCommand = new Command<string>(OnMasterItemSelected); 从这个方法中,我想返回我可以在button click方法中使用的Page对象。如

我想为一个方法定义一个返回类型,该方法与我的命令关联,该命令在单击按钮时执行。比如说,

点击按钮

this.Detail = ViewModel.MasterItemSelectedCommand.Execute(seleteditem);
在模型构造函数中

MasterItemSelectedCommand = new Command<string>(OnMasterItemSelected);
从这个方法中,我想返回我可以在button click方法中使用的Page对象。如果我在这个方法中使用Page而不是void作为返回类型,那么我得到的错误是,这个方法有一个错误的返回类型


那么,有没有办法为上述方法定义返回类型?请提供帮助。

命令结构不是为这样使用而设计的。但是您可以只定义一个公共方法,而不是在代码中手动调用命令

您的方法:

public Page ChangeMasterItem(string selecteditem)
{
    switch (seleteditem)
    {
        case "ABC":
            return new TestDrillPageDetail("Test Drill Page Detail 1");

        // and so on ...
    }
}
您可以这样定义命令:

public ICommand MasterItemSelectedCommand => new Command<string>((selecteditem) =>
{
    var mypage = ChangeMasterItem(selecteditem);

    // You can use mypage now if you want
});

谢谢你的解决方案。但在这种情况下,定义命令的意义是什么。因为它是一个公共方法,我在单击按钮时直接调用它。在这种情况下,您不需要命令。为了完整起见,我刚刚添加了它,因为您在问题中还定义了一个命令。您也可以只使用命令并在命令操作中设置详细信息页面(这样您就不需要按钮单击事件),也可以不使用命令我添加了命令,因为我想通过MVVM的方式来完成。现在,如果无法为与命令关联的方法定义返回类型,那么这是您建议的一个好选项,但您可以使用命令。您不需要返回类型。只需在命令操作中执行所需的操作。或者我误解了什么?是的,我需要一个返回类型,因为我必须只在代码隐藏中设置“this.Detail”,而不是在VM中。原因是我不想给我的虚拟机任何页面引用。
public ICommand MasterItemSelectedCommand => new Command<string>((selecteditem) =>
{
    var mypage = ChangeMasterItem(selecteditem);

    // You can use mypage now if you want
});
this.Detail = ViewModel.ChangeMasterItem(seleteditem);