Xamarin表示MvvmCross绑定按钮命令错误

问题描述 投票:0回答:1

我正在开发一个Xamarin Forms MvvmCross项目。我在视图模型上使用IMvxAsyncCommand绑定视图上的常用按钮命令,如下所示:

  • 视图 <views:MvxContentPage xmlns="http://xamarin.com/schemas/2014/forms" xmlns:x="http://schemas.microsoft.com/winfx/2009/xaml" xmlns:views="clr- namespace:MvvmCross.Forms.Views;assembly=MvvmCross.Forms" x:Class="TestProject.Pages.TestPage"> <ContentView> <StackLayout> <Button Text="Test the command!" Command="{Binding TestAsyncCommand}"/> </StackLayout> </ContentView>
  • 查看模型 namespace TestProject.ViewModels { public class TestViewModel : MvxNavigationViewModel { public TestViewModel(IMvxLogProvider logProvider, IMvxNavigationService navigationService) : base(logProvider, navigation) { } public IMvxAsyncCommand TestAsyncCommand => new MvxAsyncCommand(async () => await TestAsyncCommandMethod()); private async Task TestAsyncCommandMethod() { //await some stuff } } }

Anythings似乎工作正常,但很少有时按下按钮后它就会失效。怎么会发生什么?如果我使用Command代替MvxAsyncCommand,似乎没有发生(但我不确定),就像这里:

public Command TestAsyncCommand => new Command(async () => await TestAsyncCommandMethod());

注意:TestAsyncCommandMethod完全包含在try-catch块中以避免可能的异常。

xamarin button command mvvmcross
1个回答
0
投票

我认为你在这里做的错误是,你可以试试这个:而不是创建一个Property来绑定View和ViewModel你正在使用一个字段:

public IMvxAsyncCommand TestAsyncCommand {get; set;}

然后在你的构造函数中执行以下操作:

public TestViewModel(IMvxLogProvider logProvider, IMvxNavigationService navigationService)
        : base(logProvider, navigation)
    {
      TestAsyncCommand = new MvxAsyncCommand(async () => await TestAsyncCommandMethod());
    }

UPDATE

这似乎是MvvmCross的一个错误!问题可以在添加的链接中找到

https://github.com/MvvmCross/MvvmCross/issues/1589

© www.soinside.com 2019 - 2024. All rights reserved.