将数据从 Activity 传递到 ViewModel

Passing data from Activity to ViewModel

我是使用 MvvmCross 的新手,我遇到了一个问题。我想以原生方式 Activity 实现拍照,但我不知道如何将数据传递给 ViewModel。

有办法吗?

将数据传递到 ViewModel 相当容易。如果你在 Activity 中并且假设它继承自 MvxActivity 或类似的东西你将拥有 ViewModel 属性 你可以直接从它访问。

这些活动也有通用版本,因此您不必自己对 ViewModel 属性 进行类型转换。

所以如果你有:

public class MyActivity : MvxActivity<PictureViewModel>
{

}

然后就可以访问ViewModel:

ViewModel.SomeViewModelProperty = myData;

myData 对象可以是包含图片数据的字节数组。

MvvmCross 已经有一个拍照插件,它使用内置的 Android 相机拍照。如果你加上

MvvmCross.Plugins.PictureChooser

对于你的 Android 和 Core 项目,那么你可以直接在 ViewModel 中使用 IMvxPictureChooserTask,而不涉及任何其他内容:

public class PictureViewModel : MvxViewModel
{
    private IMvxPictureChooserTask _pictureTask;
    public PictureViewModel(IMvxPictureChooserTask pictureTask)
    {
        _pictureTask = pictureTask;
    }

    private byte[] _pictureBytes;

    // in some command:
    private void DoTakePicture()
    {
        _pictureTask.TakePicture(500, 500, stream => {
            _pictureBytes = ReadStream(stream);
        }, () => {});
    }
}