【问题标题】:Xamarin Form: How to bind Command from ViewModel to XAMLXamarin 表单:如何将命令从 ViewModel 绑定到 XAML
【发布时间】:2017-01-15 20:22:57
【问题描述】:

我正在尝试将命令绑定到 Xaml 中的按钮。我可以绑定在 ViewModel 中声明的属性并查看它来更改按钮背景的颜色。使用相同的方式将命令添加到按钮,当我单击它时,按钮没有触发命令。

我的 ViewModel 命令属性

    public Color Color
    {
        get
        {
            return Color.Teal;
        }
    }

    public ICommand OpenFileCommand = new Command((object obj) => { 
        Task.Run(() =>
        {
              var pickFileTask = CrossFilePicker.Current.PickFile();
              var data = pickFileTask.Result;
              //OpenDocument(data.FileName, data.DataArray);
        });
    });

Xaml 部分:

<!-- Left Panel --> 
            <StackLayout x:Name="leftStack" Orientation="Vertical" BackgroundColor="Transparent">
                <Button  
                    x:Name="btnOpen"
                    BackgroundColor="{Binding Color}" 
                    Command="{Binding OpenFileCommand}"
                    Image="addfile"
                    HorizontalOptions="CenterAndExpand"
                    VerticalOptions="CenterAndExpand"  
                    WidthRequest="40" 
                    HeightRequest="40">
                </Button>

如果我在代码中绑定命令,它将在我的视图模型类中执行 OpenFileCommmand:

btnOpen.Command = viewModel.OpenFileCommand;

【问题讨论】:

  • 我很困惑哪个部分不工作?是 XAML 还是 C#
  • 对不起,我现在可以工作了...在我定义 Command 属性的视图模型中。我已更改为 getter 并返回一个 Command 对象。

标签: mvvm xamarin command viewmodel


【解决方案1】:

对我有用的是将 ICommand 定义为具有如下吸气剂的属性:

public ICommand OpenFileCommand { get { return new Command(() => TestMethod()); } }


public void TestMethod() {

      //Do stuff here
}

【讨论】:

    【解决方案2】:

    我通过更改定义命令属性的视图模型类来使其工作。

    public ICommand OpenFileCommand 
        {
            get
            { 
                return new Command((object obj) =>
                {
                    Task.Run(() =>
                    {
                        var pickFileTask = CrossFilePicker.Current.PickFile();
                        var data = pickFileTask.Result;
                        OpenDocument(data.FileName, data.DataArray);
                    });
                });
            }
        }
    

    【讨论】:

      猜你喜欢
      • 2017-01-18
      • 2021-10-20
      • 2014-09-07
      • 1970-01-01
      • 2017-06-15
      • 2015-10-30
      • 1970-01-01
      • 1970-01-01
      • 2019-08-08
      相关资源
      最近更新 更多