ConvertBack не запущен - PullRequest
       43

ConvertBack не запущен

1 голос
/ 12 февраля 2012

Я использую мой конвертер так:

<ControlTemplate TargetType="{x:Type TabItem}">
<Border Name="Border" 
    Background="{Binding
        Path=ConversationState,
        Converter={StaticResource conversationStatusConverter},
        Mode=TwoWay,
        NotifyOnSourceUpdated=true,
        ValidatesOnExceptions=True,
        UpdateSourceTrigger=PropertyChanged}" >

Это мое определение триггеров:

<ControlTemplate.Triggers>
    <Trigger Property="IsSelected" Value="True">
        <Setter TargetName="Border" Property="Background" Value="DeepPink" />
    </Trigger>
    <Trigger Property="IsSelected" Value="False">
        <Setter TargetName="Border" Property="Background" Value="LightGray" />
    </Trigger>
</ControlTemplate.Triggers>

И мой метод обратного преобразования:

public object ConvertBack(object value, Type targetType, object parameter,
    CultureInfo culture)
{
    if (value.ToString() == "DeepPink")
        return ConversationStatus.Active;
    else if (value.ToString() == "Orange")
        return ConversationStatus.UnseenMessage;
    else if (value.ToString() == "LightGray")
        return ConversationStatus.Inactive;
    else return DependencyProperty.UnsetValue;
}

Когда выбрана вкладка, фон становится темно-розовым, но модель никогда не изменяется, статус остается прежним.Работает источник-цель (преобразуется нормально), цель-источник в триггерах через свойство isselected элемента tab, ничего не делает для модели.большое спасибо!

1 Ответ

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

Вы просто перезаписываете привязку, двусторонняя привязка работает только при изменении значения current свойства, например когда пользователь вводит текст в TextBox внутренне SetCurrentValue, вызывается свойство Text, оставляя все привязки на месте.

Backgrounds никогда не изменяются таким образом, вы не можете изменить значение в XAML без замены привязки.

Вы должны попытаться подойти к этому иначе, получение информации о состоянии от цвета кажется сомнительным, если не сказать больше. (Вы даже не получите эти строки из кистей, они должны преобразоваться во что-то вроде #FFFF00FF)

Редактировать: Как отмечено в комментариях, вы можете обработать TabControl.SelectionChanged и установить статус вновь выбранного элемента. И если вы действительно должны избегать выделенного кода в представлении (которое * MVVM не требует , а !), Вы также можете использовать обходной путь для этого.

...