2012-02-12 99 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

如果狀態保持與以前一樣,轉換(轉發)如何工作。一個觸發器級聯到一個轉換器 - 我不認爲它是用於這種方式。我不明白你爲什麼不能處理TabItem的IsSelected。 – Paparazzi 2012-02-12 21:33:32

回答

0

您只需覆蓋綁定,雙向綁定僅適用於當屬性的當前值正在更改(例如,當用戶在文本內部輸入TextBox內部SetCurrentValue被調用Text屬性時,留下任何綁定。

Backgrounds永遠不會改變這種方式,您不能更改XAML中的值而無需替換綁定。

你應該嘗試以不同的方式處理,從某種顏色獲取狀態信息似乎值得懷疑,至少可以說。 (你甚至不會從刷這些字符串,就應該轉換爲類似#FFFF00FF

編輯:如前所述的評論,你可以處理TabControl.SelectionChanged並設置新選擇項目的狀態。如果你真的必須避免在視圖中隱藏代碼隱藏(這是而不是需要MVVM!),您也可以使用a workaround

+0

這不是關於聯繫人的狀態,它只是爲了查看用戶是否通過激活視圖來閱讀消息。我無法從任何地方得到它,但是被選中。這裏只是一個例子,但我真的需要做這個工作。就像你有消息時的gtalk一樣,標籤會閃爍,一旦你激活了標籤,它就會停止閃爍。 – KitAndKat 2012-02-12 16:16:09

+0

@Anna:你可以處理選項卡控件上的SelectionChanged事件,獲取底層的選項卡數據對象並清除其狀態。隨着屬性被綁定,「背景」將自動改回。 – 2012-02-12 16:19:06

+0

這是MVVM ...我無法在代碼中處理它,也沒有viewmodel中的任何UI元素。要看看你的覆蓋約束力的東西.. – KitAndKat 2012-02-12 16:19:54