2012-01-25 59 views
2

我有這樣的代碼如何從<MultiBinding>中填充<Hyperlink> NavigateUri屬性?

<Hyperlink NavigateUri=""> 
    <Run> 
    <Run.Text> 
     <MultiBinding StringFormat="{}{0}{1}{2}"> 
       <Binding Path="Text" ElementName="tbxHostData" /> 
       <Binding Path="Text" ElementName="tbxWebSiteDataName" /> 
       <Binding Path="Text" ElementName="tbxDataServicesName" /> 
      </MultiBinding> 
    </Run.Text> 
    </Run> 
</Hyperlink> 

如何使用<MultiBinding>填充NavigateUri=""

有沒有可能?


由於@ThomasLevesque

SOLUTION:

<Window.Resources> 
    <c:StringToUriConverter x:Key="stringToUriConverter"/> 
</Window.Resources> 

<Hyperlink.NavigateUri> 
     <MultiBinding ConverterParameter="" Converter="{StaticResource uriConverter}"> 
      <Binding Path="Text" ElementName="tbxHostData" /> 
      <Binding Path="Text" ElementName="tbxWebSiteDataName" /> 
      <Binding Path="Text" ElementName="tbxDataServicesName" /> 
     </MultiBinding> 
</Hyperlink.NavigateUri> 

C#

[ValueConversion(typeof(String), typeof(Uri))] 
public class UriConverter : IMultiValueConverter 
{ 
     public object Convert(object[] values, Type targetType, object parameter, CultureInfo culture) 
     { 
      Uri result; 
      string input = String.Join(string.Empty, values); 

      Uri.TryCreate(input, UriKind.RelativeOrAbsolute, out result); 
      return result; 
     } 

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

回答

3

這是可能的,但不與StringFormat(其僅適用於類型String的屬性)。您需要使用轉換器。

<Hyperlink.NavigateUri> 
    <MultiBinding Converter="{StaticResource uriConverter}"> 
     <Binding Path="Text" ElementName="tbxHostData" /> 
     <Binding Path="Text" ElementName="tbxWebSiteDataName" /> 
     <Binding Path="Text" ElementName="tbxDataServicesName" /> 
    </MultiBinding> 
</Hyperlink.NavigateUri> 
public class UriConverter : IMultiValueConverter 
{ 
    public object Convert(object[] values, Type targetType, object parameter, CultureInfo culture) 
    { 
     string uriString = String.Join(string.Empty, values); 
     return new Uri(uriString); 
    } 

    public object[] ConvertBack(object value, Type[] targetTypes, object parameter, CultureInfo culture) 
    { 
     throw new NotImplementedException(); 
    } 
} 
+1

具體地說MultiValueConverter http://msdn.microsoft.com/en-us/library/system.windows.data.imultivalueconverter.aspx –