Xamarin表单:如何将命令从ViewModel绑定到XAML

时间:2016-09-08 02:47:48

标签: mvvm xamarin command viewmodel

我正在尝试将命令绑定到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;

2 个答案:

答案 0 :(得分:0)

我通过更改我定义命令属性的View Model类来实现它。

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

答案 1 :(得分:0)

对我有用的是将ICommand定义为具有这样的getter的属性:

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


public void TestMethod() {

      //Do stuff here
}