Xamarin MVVM处理文件



我正在使用Xamarin和MVVM开发iOS和Android应用程序。应用程序应该从服务器上传/下载文件。具体来说,Android上有一个按钮,点击它,Android文件选择器打开,我得到文件。iOS也是如此。问题是,我试图将文件发送到viewmodel作为流,但在Android是作为Android.Runtime.InputStreamInvoker和在iOS是作为NSData。是否有任何通用的方式发送文件的流到视图模型或任何铸造?而cast到Stream不起作用,当我发送它不是viewmodel时,我不能从Stream获得任何信息。也许有人有这样的问题。

例如,在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并发送,但它很慢而且不好,我正在寻找一种不制作副本的方法。

有时在这种情况下,我将只是键入属性为System.Object。绑定系统在运行时使用反射来访问属性,所以你的属性使用什么具体类型并不重要。

这假设无论连接到视图模型的是什么,都可以在该平台上获得NSData(在iOS上)或Android等效的NSData。

相关内容

  • 没有找到相关文章

最新更新