2016-12-16 2 views
-1

좋은 날,WPF mailto MVVM 바인딩

전자 메일 주소로 기본 mailclient를 열 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

그게 전부 고마워. Excatly 내가 원한 것. – user1702369

관련 문제