Как передать постоянное значение для 1 привязки в мульти-привязке?

98

У меня есть мульти-привязка вроде

<TextBlock>
    <TextBlock.Text>
        <MultiBinding Converter="{StaticResource myConverter}">
            <Binding Path="myFirst.Value" />
            <Binding Path="mySecond.Value" />
        </MultiBinding>
    </TextBlock.Text>
</TextBlock>

И я хочу передать фиксированное значение, например «123», в одну из двух привязок выше. Как я могу это сделать с помощью XAML?

Nam G VU
источник
1
какие-нибудь фрагменты кода / примеры, пожалуйста?
Torsten
Я думаю, что некоторая часть вопроса отсутствует, вы ссылаетесь на привязку выше, но я не вижу кода привязки в вопросе.
Акджоши
1
Почему-то каждый раз, когда у меня возникает вопрос, кто-то раньше задавал точно такой же вопрос :) Отлично!
Игнасио Солер Гарсия,
1
Четвертый способ сделать это - использовать следующий ответ: stackoverflow.com/a/2552911/222134
Джонни Сковдал,

Ответы:

148

Если ваше значение просто a string, вы можете указать его как константу в Sourceсвойстве привязки. Если это любой другой примитивный тип данных, вам необходимо определить статический ресурс и сослаться на него.

Определите sysпространство имен в корне XAML, чтобы указать на него Systemв mscorlib, и следующее должно работать:

<TextBlock>
  <TextBlock.Resources>
    <sys:Int32 x:Key="fixedValue">123</sys:Int32>
  </TextBlock.Resources>
  <TextBlock.Text>
    <MultiBinding Converter="{StaticResource myConverter}">
      <Binding Path="myFirst.Value" />
      <Binding Source="{StaticResource fixedValue}" />
    </MultiBinding>
  </TextBlock.Text>
</TextBlock>
Нолдорин
источник
1
@tofutim Это потому, что у MultiBinding нет ресурсов. Вместо этого используйте TextBlock.Resources ...
Мартин Хеннингс,
6
Возможно, вам стоит добавить в свое решение xmlns: sys = "clr-namespace: System; assembly = mscorlib" ;-)
c0d3b34n 07
104

Или, объединив два ответа выше:

<MultiBinding Converter="{StaticResource ScalingConverter}">
    <Binding>
        <Binding.Source>
            <sys:Double>0.5</sys:Double>
        </Binding.Source>
    </Binding>
    <Binding ElementName="TC" Path="ActualWidth" />
</MultiBinding>

Что обеспечивает правильный тип без кладжа ресурсов.

Андерс Каплан
источник
2
Необходимо определить пространство имен sysв заголовке документа:xmlns:sys="clr-namespace:System;assembly=mscorlib"
Beauty
26

Я не совсем понимаю вопрос, но есть два варианта:

Поместите строку <Binding Source="123" />в мультибиндинг, который передаст преобразователю 123 как связанное значение.

Вставьте ConverterParameter="123"MultiBinding:

<MultiBinding Converter="{StaticResource conv}" ConverterParameter="123">

Бен Пирс
источник
<Binding Source = "123" /> похоже, передает DependencyProperty.UnsetValue
Джош Стриблинг
<Binding Source = "123" /> передает строку "123" вместо целого числа или двойного числа, как я предполагал в моем случае.
Marcel Gosselin
В IValueConverterпараметры передаются как object, что означает, что вам нужно будет безопасно привести значение к правильному типу. IValueConverter.Convert
benPearce
6

Я не говорю, что это особенно хороший ответ, но вот другой подход:

<Binding Path="DoesNotExist" FallbackValue="123" />
Дэвид Холлинсхед
источник