Xamarin MVVM使用文件

时间:2016-06-27 11:05:58

标签: c# file mvvm xamarin

我正在使用Xamarin和MVVM为iOS和Android开发应用程序。应用程序应将\ download文件上传到\ from服务器。详细说明,Android上有一个按钮,点击它Android文件选择器打开,我正在获取文件。在iOS中也一样。问题是我正在尝试将文件作为Stream发送到viewmodel,但在Android中它是Android.Runtime.InputStreamInvoker,在iOS中是NSData。是否有任何通用的方式将文件的流发送到viewmodel或任何投射?并且转换为Stream不起作用,当我发送它不是viewmodel时,我无法从流中获取任何信息。也许有人有这样的问题。

例如,在Android接收文件:

public override void OnActivityResult(int requestCode, int resultCode, Intent intent)
{
    base.OnActivityResult(requestCode, resultCode, intent);
    if (resultCode == (int)Result.Ok)
    {
        var returnUri = intent.Data;
        var mimeType = _baseActivity.ContentResolver.GetType(returnUri);
        var returnCursor =
                _baseActivity.ContentResolver.Query(returnUri, null, null, null, null);
        int nameIndex = returnCursor.GetColumnIndex(OpenableColumns.DisplayName);
        int sizeIndex = returnCursor.GetColumnIndex(OpenableColumns.Size);
        returnCursor.MoveToFirst();
        var name = returnCursor.GetString(nameIndex);
        var size = returnCursor.GetLong(sizeIndex);

        var inputStream = (Android.Runtime.InputStreamInvoker) _baseActivity.ContentResolver.OpenInputStream(returnUri);
        var count = inputStream.BaseInputStream.Available();

        //then I want to send inputStrea here what to do next??
    }
}

我知道我可以读取整个文件并将其复制到例如MemoryStream并发送,但它非常慢且不好,我正在寻找一种方法而不进行复制。

1 个答案:

答案 0 :(得分:0)

有时在这种情况下,我只需输入System.Object属性即可。绑定系统使用反射在运行时访问属性,因此对于您的属性使用的具体类型并不重要。

这假设连接到您的viewmodel的任何内容都可以获得NSData(在iOS上时)或在该平台上获得等效的。