Як я можу передати постійне значення для 1 зв'язування в мультизв'язуванні?


97

У мене є багатозв’язувальний лайк

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

І я хочу передати фіксоване значення, наприклад "123", до одного з двох прив'язок вище. Як я можу це зробити за допомогою XAML?


1
будь-які фрагменти коду / приклади, будь ласка?
Торстен

Я думаю, що якась частина питання відсутня, ви маєте на увазі прив’язку вище, але я не бачу жодного прив’язувального коду у питанні.
akjoshi

1
Якось кожного разу, коли у мене виникає запитання, у когось раніше було саме таке питання :) Чудово!
Ігнасіо Солер Гарсія

1
Четвертий спосіб зробити це було б використовувати цей відповідь: stackoverflow.com/a/2552911/222134
Johny Skovdal

Відповіді:


146

Якщо ваше значення - просто a string, ви можете вказати його як константу у Sourceвластивості прив'язки. Якщо це будь-який інший примітивний тип даних, вам потрібно визначити статичний ресурс і посилатися на нього.

Визначте sysпростір імен у корені XAML для вказівки на Systemmscorlib, і слід працювати наступне:

<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

103

Або поєднуючи дві відповіді вище:

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

Що забезпечує правильний тип без помилок Resources.


1
Це потрібно для визначення простору імен sysу заголовку документа:xmlns:sys="clr-namespace:System;assembly=mscorlib"
Beauty

25

Я не дуже дотримуюся цього питання, але є два варіанти:

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

Помістіть ConverterParameter="123"у свій MultiBinding:

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


<Зв'язуючи джерело = "123" />, здається, переходить DependencyProperty.UnsetValue
Джош Стриблінг

<Binding Source = "123" /> передає рядок "123" замість цілого чи подвійного, що я призначив у своєму випадку.
Марсель Госселін,

У IValueConverter, параметри передаються як object, що означає, що вам потрібно буде привести значення до правильного типу безпечним способом. IValueConverter.Convert
benPearce

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.