ConvertBack没有被解雇

时间:2012-02-12 16:05:11

标签: wpf xaml data-binding triggers ivalueconverter

我正在使用我的转换器:

<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),通过tab项的isselected属性在触发器中定位到源,在模型上没有做任何事情。 非常感谢!

1 个答案:

答案 0 :(得分:0)

您只需覆盖绑定,双向绑定仅在更改属性的当前值时起作用,例如当用户在TextBox内部Text内部键入文本时,Backgrounds - 属性会调用该文本,并保留任何绑定。

#FFFF00FF永远不会改变,你不能在不更换绑定的情况下更改XAML中的值。

你应该尝试以不同的方式解决这个问题,从颜色中获取状态信息似乎有问题,至少可以说。 (你甚至不会从画笔中获取这些字符串,它们应该转换为TabControl.SelectionChanged

之类的字符串

修改:如评论中所述,您可以处理{{1}}并设置新选择项目的状态。如果你真的必须避免视图中的代码隐藏(MVVM不需要 ),你也可以使用SetCurrentValue