2016-12-16 11 views
-1

良い日、WPF mailto MVVMバインド

私は、電子メールアドレスでデフォルトのメールクライアントを開くWPFハイパーリンクを実装しようとしています。それでおしまい。

ここでは多くの例を参照しましたが、各例ではほとんどの場合、イベントまたはパラメータがコマンドに渡されます。私がこれを達成できる他の方法はありますか?電子メールアドレスは制限されていますか? MVVMの原則を念頭に置いてください。

<TextBlock Grid.Column="3" HorizontalAlignment="Left" VerticalAlignment="Center"> 
    <Hyperlink NavigateUri="mailto:[email protected]"> 
     <Run Text="{Binding Email}" /> 
    </Hyperlink> 
</TextBlock> 

答えて

1
あなたは以下のようにコンバータを試すことができ

<TextBlock Grid.Column="3" 
       HorizontalAlignment="Left" 
       VerticalAlignment="Center"> 
     <TextBlock.Resources> 
      <local:StringToMailToConverer x:Key="StringToMailToConverer" /> 
     </TextBlock.Resources> 
     <Hyperlink NavigateUri="{Binding Email, Converter={StaticResource StringToMailToConverer}}"> 
      <Run Text="{Binding Email}" /> 
     </Hyperlink> 
    </TextBlock> 

コンバータ、

public class StringToMailToConverer : IValueConverter 
{ 
    public object Convert(object value, Type targetType, object parameter, CultureInfo culture) 
    { 
     if(value != null) 
     { 
      if (!string.IsNullOrEmpty(value.ToString())) 
      { 
       return "mailto:" + value.ToString(); 
      } 
     } 
     return string.Empty; 
    } 

    public object ConvertBack(object value, Type targetType, object parameter, CultureInfo culture) 
    { 
     throw new NotImplementedException(); 
    } 
} 

アップデートその場合 、あなたが使用することができます。これは私がSOFAR持っているものです単純な挙動、

<TextBlock xmlns:i="http://schemas.microsoft.com/expression/2010/interactivity" 
       Grid.Column="3" 
       HorizontalAlignment="Left" 
       VerticalAlignment="Center"> 
     <Hyperlink NavigateUri="{Binding Email}"> 
      <i:Interaction.Behaviors> 
       <local:MailToBehaviour /> 
      </i:Interaction.Behaviors> 
      <Run Text="{Binding Email}" /> 
     </Hyperlink> 
    </TextBlock> 

public class MailToBehaviour : Behavior<Hyperlink> 
{ 
    protected override void OnAttached() 
    { 
     base.OnAttached(); 
     AssociatedObject.RequestNavigate += (_, __) => 
     { 
      Process.Start("mailto:" + __.Uri); 
      __.Handled = true; 
     }; 
    } 
} 

System.Windows.Interactivityアセンブリを参照する必要があります

+0

はい、試しましたが、既定のメールクライアントを開く機能がありません。 NavigateUriを "mailto:[email protected]"に設定しても、メールクライアントを開く機能は自動的に実装されません。 – user1702369

+0

@ user1702369私の更新を参照してください – WPFUser

+0

それは、ありがとうございます。間違いなく私が望むもの。 – user1702369

関連する問題