Свойство зависимости для ValueConverter или контроль повторного связывания? - PullRequest
0 голосов
/ 26 февраля 2010

У меня есть пользовательский элемент управления с некоторым текстом в шаблоне контента:

<ControlTemplate TargetType="{x:Type local:TouchScreenKey}">    
    <TextBlock><ContentPresenter Content="{TemplateBinding Title, Converter={StaticResource CaseConverter}}" /></TextBlock>
</ControlTemplate>

и пользовательский IValueConverter CaseConverter - со свойством UpperCase. Таким образом, когда свойство UpperCase конвертера установлено в true, при привязке текст преобразуется в верхний регистр. Все идет хорошо, если я поменяю UpperCase в разметке. Но если я изменяю свойство во время выполнения - ничего не происходит - потому что изменение свойства конвертера не заставляет мой элемент управления перепривязываться. Как я могу повторно привязать элемент управления, который использует конвертер при изменении свойств конвертера?

Ответы [ 2 ]

0 голосов
/ 26 февраля 2010

Это может кому-то помочь - я нашел решение - с помощью мультисвязи

<TextBlock HorizontalAlignment="Center" VerticalAlignment="Center">
<ContentPresenter>
    <ContentPresenter.Content>
        <MultiBinding Converter="{StaticResource MultiCaseConverter}">
            <Binding RelativeSource="{RelativeSource TemplatedParent}" Path="Title" />
            <Binding ElementName="TouchKeyboard" Path="UpperCase" />
        </MultiBinding>
    </ContentPresenter.Content>
</ContentPresenter>

и написал MultiCaseConverter - который преобразует первый параметр в зависимости от второго (UpperCase)

0 голосов
/ 26 февраля 2010

Насколько я знаю, нет никакого способа сказать конвертеру обновить все цели. Конвертер ничего не знает о целях. Это просто функция без сохранения состояния, F(x), принимает одно значение и возвращает другое.

Чтобы обновить свойство, вам следует попросить об этом WPF. Например, если свойство связано с каким-либо исходным свойством, вы можете реализовать INotifyPropertyChanged и вызвать событие PropertyChanged. Или вы можете попросить BindingOperations to получить выражение привязки и вызвать UpdateTarget () вручную.

Может быть, конвертер здесь не лучший выбор? Вы также можете рассмотреть возможность использования Attached Properties для изменения заглавных букв.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...