我正在使用我的转换器:
<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属性在触发器中定位到源,在模型上没有做任何事情。 非常感谢!
答案 0 :(得分:0)
您只需覆盖绑定,双向绑定仅在更改属性的当前值时起作用,例如当用户在TextBox
内部Text
内部键入文本时,Backgrounds
- 属性会调用该文本,并保留任何绑定。
#FFFF00FF
永远不会改变,你不能在不更换绑定的情况下更改XAML中的值。
你应该尝试以不同的方式解决这个问题,从颜色中获取状态信息似乎有问题,至少可以说。 (你甚至不会从画笔中获取这些字符串,它们应该转换为TabControl.SelectionChanged
)
修改:如评论中所述,您可以处理{{1}}并设置新选择项目的状态。如果你真的必须避免视图中的代码隐藏(MVVM不需要 ),你也可以使用SetCurrentValue
。