将数据从Activity传递到ViewModel

时间:2017-07-28 12:24:47

标签: c# mvvmcross

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

有办法做到这一点吗?

1 个答案:

答案 0 :(得分:2)

将数据传递给ViewModel非常简单。如果您在Activity中,并且假定它继承自MvxActivity或类似内容,则您可以使用ViewModel属性直接访问它。

这些活动也有通用版本,因此您不必自行输入ViewModel属性。

所以如果你有:

public class MyActivity : MvxActivity<PictureViewModel>
{

}

然后您可以访问ViewModel

ViewModel.SomeViewModelProperty = myData;

myData对象可以是带有图片数据的字节数组。

MvvmCross确实有一个Picture takegin插件,它使用内置的Android相机拍照。如果你添加

MvvmCross.Plugins.PictureChooser

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

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);
        }, () => {});
    }
}