2016-12-16 2 views
-1

Доброго дня,WPF MVVM MAILTO Связывание

Я пытаюсь реализовать 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(); 
    } 
} 

Update В этом случае, вы можете использовать простое поведение,

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

+0

Да, я пробовал, но функции открытия почтового клиента по умолчанию отсутствуют. установка NavigateUri на «mailto: [email protected]» автоматически не выполняет функции открытия почтового клиента. – user1702369

+0

@ user1702369 см. Мое обновление – WPFUser

+0

Thats it, большое спасибо. Я действительно хотел. – user1702369

Смежные вопросы