Как передать параметру конвертера что-то, что не является жестко запрограммированным

Что-то типа:

 <TextBlock Text="{Binding Text,Converter={StaticResource
  ccc},ConverterParameter=PersonName}"/>

например, когда имя человека является свойством класса.

Обновление:

Я видел решение, которое говорит наследовать от DependencyObject и реализовать IValueConverter. Я хочу знать, есть ли что-то проще.


person Erez    schedule 15.06.2011    source источник
comment
Предполагая, что TextBlock привязан к dataObject., ваш пример показывает, что вы хотите, чтобы TextBlock.Text равнялся некоторой функции поля dataObject.Text и dataObject.PersonNametext. Имеет ли dataObject свойство .Text? Если нет, используйте {Binding PersonName...}. If so, can you pass the whole dataObject in like this: {Binding Converter={StaticResource ccc}}`? Делает то, что вам нужно?   -  person agent-j    schedule 15.06.2011
comment
@agent-j Параметр, который мне нужен, находится в моем окне, а не в объекте данных.   -  person Erez    schedule 15.06.2011
comment
@Захид Саттар прав. +1   -  person agent-j    schedule 15.06.2011


Ответы (2)


Ответ прост, но не то, что вы хотите услышать.

Вы можете нацеливать привязку только на DependencyProperty на DependencyObject. Binding не наследуется от DO, поэтому вы не можете привязать параметр конвертера.

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

person Zahid Sattar    schedule 15.06.2011

Вы изучали MultiBinding? Если вы хотите, чтобы в конвертер были отправлены два свойства, например «Текст» и «Имя человека», вы можете сделать что-то вроде этого:

<TextBlock>
  <TextBlock.Text>
    <MultiBinding Converter="{StaticResource ccc}">
      <Binding Path="Text"/>
      <Binding Path="PersonName"/>
    </MultiBinding>
  </TextBlock.Text>
</TextBlock>

Это предполагает, что "Text" и "PersonNames" являются свойствами DataContext. Возможно, вам придется изменить пути привязки, если это не так.

person SergioL    schedule 15.06.2011