2012-02-12 2 views
1

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

<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; 
} 

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

+0

Как вы можете сказать, что преобразование (вперед) работает, если статус остается прежним. Триггер, каскадирующий в конвертер - я не думаю, что он был предназначен для использования таким образом. Я не понимаю, почему вы не можете обработать IsSelected из TabItem. – Paparazzi

ответ

0

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

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

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

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

+0

Дело не в статусе контакта, а в том, чтобы узнать, прочитал ли пользователь сообщение, активировав представление или нет. Я не могу получить его нигде, кроме выложенного. Это просто пример, но мне действительно нужно сделать эту работу. Как и gtalk, когда у вас есть сообщение, вкладка будет мигать, как только вы активируете вкладку, она перестанет мигать. – KitAndKat

+0

@Anna: вы можете обработать событие «SelectionChanged» в элементе управления вкладкой, получить базовый объект данных вкладки и очистить его статус. По мере того как свойство привязано, «Фон» будет автоматически изменяться. –

+0

Это MVVM ... Я не могу справиться с этим в коде и не имеет элемента интерфейса в viewmodel. Собираюсь заглянуть в вашу переписывающую вещь .. – KitAndKat