2016-12-16 2 views
-1

Guten Tag,WPF mailto MVVM Bindung

ich eine WPF-Hyperlink zu implementieren versuche, die die Standardmailclient mit der E-Mail-Adresse wird geöffnet. Das ist es.

Jetzt habe ich viele viele Beispiele durchsucht, aber jedes Beispiel verwendet fast ein Ereignis oder einen Parameter, der an den Befehl übergeben wird. Gibt es eine andere Möglichkeit, dies zu erreichen? Die E-Mail-Adresse ist begrenzt? Beachten Sie das MVVM-Prinzip. Dies ist, was ich habe sofar bekam:

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

Antwort

1

Sie Converter versuchen können, wie unten,

<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> 

Konverter,

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

aktualisieren In diesem Fall können Sie verwenden einfaches Verhalten,

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

müssen Sie beziehen System.Windows.Interactivity Assembly

+0

Ja, ich habe es versucht, aber die Funktionalität des Öffnens der Standard-Mail-Client fehlt. Wenn Sie NavigateUri auf "mailto: [email protected]" festlegen, wird die Funktionalität zum Öffnen des Mail-Clients nicht automatisch implementiert. – user1702369

+0

@ user1702369 sehe mein Update – WPFUser

+0

Das ist es, vielen Dank. Genau was ich wollte. – user1702369