public override void PerformLayout() { base.PerformLayout(); Action <object, string, string> fileOpenAction = (jsBlob, textContent, dataUrl) => { var eventArgs = new FileUploadEventArgs(jsBlob, textContent, dataUrl); FileOpened?.Invoke(this, eventArgs); Command?.Execute(new ICommandParameter(eventArgs)); }; Action <object> changeAction = evt => { var input = Verbatim.Expression("evt.target"); var file = Verbatim.Expression("$0.files[0]", input); FileName = (string)Verbatim.Expression("$0.name", file); var reader = Verbatim.Expression("new FileReader()"); Action onLoadAction = () => { var jsBlob = Verbatim.Expression("$0.result", reader); //string fileMimeType = (string)Verbatim.Expression("$0.type", file); string textContent = null; string dataUrl = null; switch (UploadType) { case FileUploadType.TextFile: switch (FileEncoding) { case FileReaderEncoding.ASCII: textContent = jsBlob as string; break; case FileReaderEncoding.UTF8: textContent = BufferConverter.ArrayBufferToStringUTF8(jsBlob); break; case FileReaderEncoding.UTF16: textContent = BufferConverter.ArrayBufferToStringUTF16(jsBlob); break; } break; case FileUploadType.ImageFile: dataUrl = jsBlob as string; break; } fileOpenAction(jsBlob, textContent, dataUrl); }; Verbatim.Expression("$0.onload = $1", reader, onLoadAction); switch (UploadType) { case FileUploadType.TextFile: case FileUploadType.BinaryFile: if (FileEncoding == FileReaderEncoding.ASCII) { Verbatim.Expression("$0.readAsText($1);", reader, file); } else { Verbatim.Expression("$0.readAsArrayBuffer($1);", reader, file); } break; case FileUploadType.ImageFile: Verbatim.Expression("$0.readAsDataURL($1);", reader, file); break; } }; InternalJQElement.BindEventListener("change", changeAction); }