Варианты привязки стиля - PullRequest
0 голосов
/ 13 февраля 2012

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

Это то, что я уже пробовал:

У меня есть ViewModel, привязанная к просмотру. Я перезаписываю текстовый текст в текстовом поле в этом представлении, используя свойство модели представления. Это позволяет мне использовать общий стиль для моего текстового поля

У меня есть следующий стиль:

<Style x:Key="DateTimeTextBox" TargetType="TextBox">
    <Setter Property="ToolTipService.ShowDuration" Value ="40000"/>
    <Setter Property="Text" Value ="{Binding Path=.,Converter={StaticResource myConverter},UpdateSourceTrigger=PropertyChanged}"/> 
    <Style.Triggers>
      <Trigger Property="Validation.HasError" Value="true">
        <Setter Property="ToolTip" Value="Unknown date format"/>
      </Trigger>
    </Style.Triggers>
</Style>

В представлении я хочу, чтобы следующее текстовое поле было привязано к объекту DateTimeValueToBind вместо всей модели представления:

<TextBox Style="{StaticResource DateTimeTextBox}" DataContext="{Binding DateTimeValueToBind}"/>

Свойство DateTimeValueToBind правильно отображается в текстовом поле, однако оно больше не связано (когда я его изменял, свойство viewmodel не изменилось)

Я пытался добавить Mode = TwoWay в параметры привязки, но это ничего не изменило.

Не могли бы объяснить, почему свойство DateTimeValueToBind больше не связано в этом контексте?

Заранее спасибо

1 Ответ

0 голосов
/ 13 февраля 2012

Оставьте DataContext, привяжите Text к DateTimeValueToBind (переместите привязку с DataContext на Text). Вы никогда не должны устанавливать такую ​​привязку в стиле; если путь ., вы не можете связать TwoWay. (И что вы сохранили в любом случае? Вам даже нужно написать больше, поскольку "DataContext" длиннее "Text".)

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