2016-12-16 67 views
-1

美好的一天,WPF的mailto MVVM綁定

我想實現一個WPF超鏈接會打開默認的MailClient的電子郵件地址。而已。

現在我瀏覽了很多很多的示例,但每個示例幾乎都使用傳遞給命令的事件或參數。有沒有其他方法可以實現這一目標?電子郵件地址是有限的?牢記MVVM原則。這是我有SOFAR:

<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(); 
    } 
} 

更新 在這種情況下,你可以使用簡單的行爲,

<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

多數民衆贊成它,非常感謝。 Excatly我想要的。 – user1702369