2017-03-16 62 views
1

我想为与我的命令关联的方法定义返回类型,该命令在单击按钮时执行。例如,在Xamarin Forms&MVVM中定义命令方法的返回类型

在按钮的点击,

this.Detail = ViewModel.MasterItemSelectedCommand.Execute(seleteditem); 

鉴于模型构建,

MasterItemSelectedCommand = new Command<string>(OnMasterItemSelected); 

在那之后,我的方法是什么样子,

private Page OnMasterItemSelected(string seleteditem) 
{ 
    switch (seleteditem) 
    { 
     case "ABC": 
      return new TestDrillPageDetail("Test Drill Page Detail 1"); 

     case "DEF": 
      return new TestDrillPageDetail("Test Drill Page Detail 2"); 

     case "XYZ": 
      return new TestDrillPageDetail("Test Drill Page Detail 3"); 

     default: 
      return new TestDrillPageDetail("Test Drill Page Detail 1"); 
    } 
} 

从这个方法,我想要返回页面对象,我可以使用按钮单击方法。如果我在这个方法中使用Page而不是void作为返回类型,那么我得到的错误就像这个方法有一个错误的返回类型。

那么,有没有什么办法来定义上述方法的返回类型?请帮忙。

回答

2

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

你的方法:

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

并在您的按钮点击事件,只要使用方法:

this.Detail = ViewModel.ChangeMasterItem(seleteditem); 
+0

好了,谢谢为您的解决方案。但在这种情况下,定义一个命令的含义是什么。因为这是一个公共方法,我直接调用按钮单击。 –

+0

在这种情况下,您不需要命令。为了完整起见,我只是添加了它,因为您还在您的问题中定义了一条命令。你也可以直接使用该命令并在命令行动中设置你的详细信息页面(然后你不需要按钮点击事件)或者你不使用命令 – Joehl

+0

我已经添加了命令,因为我想这样做MVVM的方式。现在,如果没有办法为与命令关联的方法定义返回类型,那么这是您建议的一个很好的选择。 –