Как заполнить свойство <Hyperlink>NavigateUri из <MultiBinding>? - PullRequest
2 голосов
/ 25 января 2012

У меня есть этот код

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

РЕШЕНИЕ:

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

1 Ответ

3 голосов
/ 25 января 2012

Возможно, но не с 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();
    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...