2017-03-03 19 views
0

私は作成したxmlファイルをメールに直接添付してMessaging PlugInを使用して送信する必要があるポータブルクラスライブラリにこのボタンがあります。問題は、PCLでは.WithAttachment()がサポートされていないため、DependencyServiceを使用してこの問題を回避できるかどうかを尋ねたがっています。Xamarin PCLのメッセージングプラグイン(Carel Lotz)?

UWPクラスから.WithAttachment()を返すことはできますか(UWPはターゲットプラットフォームなので)? UWPの.WithAttachment()のオーバーロードが.WithAttachment(IStorageFileファイル)であることを読んだので、競合は起こりません。

private void Senden_Clicked(object sender, EventArgs e) 
     { 
      var emailMessenger = CrossMessaging.Current.EmailMessenger; 
      if (emailMessenger.CanSendEmail) 
      { 
       var email = new EmailMessageBuilder() 
        .To("[email protected]") 
        .Subject("Test") 
        .Body("Hello there!") 
        //.WithAttachment(String FilePath, string ContentType) overload showing in PCL 
        //.WithAttachment(IStorageFile file) overload for the UWP according to the documentation 
        .Build(); 
       emailMessenger.SendEmail(email); 
      } 

     } 

編集:私は、ボタンクリックを経由して添付ファイル付きの電子メールを送信できるようにするにはニック・周の答えを少し変更することができました

。私はこのコードの平和を変更:

var picker = new Windows.Storage.Pickers.FileOpenPicker 
    { 
     ViewMode = Windows.Storage.Pickers.PickerViewMode.List, 
     SuggestedStartLocation = Windows.Storage.Pickers.PickerLocationId.DocumentsLibrary 
    }; 
    picker.FileTypeFilter.Add("*"); 

これに:もちろん

StorageFolder sf = ApplicationData.Current.LocalFolder; 
      var file = await sf.GetFileAsync("daten.xml"); 

あなたがして、アプリのローカルフォルダ内のファイルの代わりに、ドキュメントライブラリを作成する必要があります。

答えて

1

問題は、.WithAttachment()がPCLでサポートされていないため、私はDependencyServiceを使用してこの問題を回避できるかどうかを質問したいと思います。

もちろん、DependencyServiceを使用してattactmentでメールを送信できます。しかし、コードのような2つのinterfaceを作成することができます。

のsendEmailインタフェース

public interface IMessageEmail 
    { 
     void SendEmailMehod(string address, string subject, string body, StorageFile attactment = null); 
    } 

UWPプロジェクトでIMessageEmail実装。あなたが.WithAttachment(attactment)パラメータを見ることができるように

public void SendEmailMehod(string address, string subject, string body, StorageFile attactment = null) 
{ 
    var emailMessenger = CrossMessaging.Current.EmailMessenger; 
    if (emailMessenger.CanSendEmail) 
    { 
     if (attactment != null) 
     { 
      var email = new EmailMessageBuilder() 
     .To(address) 
     .Subject(subject) 
     .Body(body) 
     .WithAttachment(attactment) 
     .Build(); 
      emailMessenger.SendEmail(email); 
     } 
     else 
     { 
      var email = new EmailMessageBuilder() 
     .To(address) 
     .Subject(subject) 
     .Body(body) 
     .Build(); 
      emailMessenger.SendEmail(email); 
     } 
    } 
} 

IStorageFileです。したがって、メソッドにファイルを渡す必要があります。したがって、別のDependencyServiceを作成することができます。

IFilePickerインタフェース

public interface IFilePicker 
    { 
     Task<StorageFile> getFileAsync(); 
    } 

UWPプロジェクトでIMessageEmail実装。

public async Task<StorageFile> getFileAsync() 
{ 
    var picker = new Windows.Storage.Pickers.FileOpenPicker 
    { 
     ViewMode = Windows.Storage.Pickers.PickerViewMode.List, 
     SuggestedStartLocation = Windows.Storage.Pickers.PickerLocationId.DocumentsLibrary 
    }; 
    picker.FileTypeFilter.Add("*"); 

    var file = await picker.PickSingleFileAsync(); 

    if (file != null) 
    { 
     return file; 
    } 

    return null; 
} 

お試しください。project私はgithubにアップロードしました。

+0

ありがとうございました。サー!ファイルを自動的に取得する方法や、デフォルトの場所をDocumentsLibraryに設定する方法があるかどうかは分かりますか? 'SuggestedStartLocation'はDocumentsLibraryにそれを設定しないので(ドキュメンテーションによると、ユーザが選んだ最後のフォルダまたはそのようなものを覚えています)。 – RoloffM

+0

@Nickオクラホマ今すぐ購入しました!そして、あなたは本当のMVPです!ありがとうございます – RoloffM

関連する問題