我被困在一些東西上,並希望一個簡單的答案。首先,我有一個有多重綁定觸發器的主題。觸發器多重導入DataTrigger不工作?
<DataTrigger Value="True">
<DataTrigger.Binding>
<MultiBinding Converter="{StaticResource MyConverter}" >
<Binding Path=".TemplatedParent" RelativeSource="{RelativeSource Self}" />
<Binding Path="IsEnabled" RelativeSource="{RelativeSource Self}" />
</MultiBinding>
</DataTrigger.Binding>
<Setter Property="Background" Value="{StaticResource NewBackgroundColor}" />
<Setter Property="BorderBrush" Value="{StaticResource NewBorderBrushColor}" />
</DataTrigger>
我的數據控制文本框,組合框有INotifyPropertyChanged的實施。
在處理過程中,在某些條件下,我想提出「IsEnabled」變化的事件,但實際上並沒有改變它的值。所以,多重綁定永遠不會被觸發。由於轉換器的第一個參數是控制對象本身,因此它永遠不會「改變」,所以它只是在那裏作爲轉換器工作的參數。
實際觸發觸發器的唯一方法就是像做
MyControl.IsEnabled = false;
MyControl.IsEnabled = true;
有一些其他方法來強制觸發多綁定數據觸發?
嘗試詳細闡述一下我的問題。我已經對基本控件(文本框,組合框,按鈕等)進行了分類以添加某些設置/功能等。對於它們的通用性,它們都支持「IMyCommonInterface」界面。無需重新定義整個「主題」(例如簡單的文本框),我希望有條件地更改顏色,如進行數據驗證,但不僅僅是簡單地改變這些示例屬性的顏色。
由於基本文本框沒有任何關於「IMyCommonInterface」的知識,也沒有定製屬性,因此我創建了一個轉換器類「MyConverter」,它將實際的控件對象作爲第一個參數。現在,coverter內,我可以做
if(values[0] is IMyCommonInterface)
那麼我可以強制轉換爲界面並檢查所有任何特殊的病情,我希望在不必明確創建說..十幾觸發每個基於A + B或A + C或(A + B NOT C)或D等
所以,我不想有一堆不同的主題,一堆觸發器等,只是一個集中處理的元素。我正在研究其他方法,但是如果我碰到一個只拋出PropertyChanged事件的實例也不會強制觸發數據觸發器,我寧願找出現在仍然試圖理解所有的(例如)鉤子。淨有,而且你基本上可以指向幾乎任何東西。
你確定'Path =「.TemplatedParent」'是正確的嗎?也許你想''Binding RelativeSource =「{RelativeSource TemplatedParent}」/>' – Vlad 2012-04-26 11:49:04
@Vlad,值得注意的是,但是,這是正確的。當我學習多部分綁定時,我實際上發現這是偶然的。如果你通過「。」的路徑。它返回對象。由於該點是組合框的切換按鈕,因此.TemplatedParent會傳遞實際的整個組合框控件。再說一遍,否則,如果我強制IsEnabled爲false並返回true,那麼我知道它的「wired」可以。 – DRapp 2012-04-26 11:58:57
這是一個非常有趣的問題 - 相當難解。我對你的問題是否有可能獲得你試圖通過這種觸發完成的細節。你的頭腦在你創建的問題的解決方案空間中。我想知道是否有另一種方法來獲得避免這個問題的效果? – 2012-04-26 21:12:15