2017-07-11 72 views
1

我處於適用多種顯示模式的情況。 喜歡的東西:C#如何優先考慮多種顯示模式?

DisplayModeProvider.Instance.Modes.Insert(0, new DefaultDisplayMode("a") 
{ 
    ContextCondition = context => AFunctionThatReturnsTrue() 
}); 

DisplayModeProvider.Instance.Modes.Insert(0, new DefaultDisplayMode("b") 
{ 
    ContextCondition = context => ADifferentFunctionThatReturnsTrue() 
}); 

什麼我遇到的是,在這種情況下,總是顯示模式「B」被應用。 現在的問題是:爲了讓顯示模式選擇「a」,我需要做些什麼?

我已經試過了,沒有工作:

  • 我試圖變更登記的順序。

  • 我試着改變顯示模式的名稱,以便顯示模式「b」按字母順序排在「a」之前。

+0

你對他們使用了不同的'ContextCondition'嗎?或者你有兩個相同的?如果不是系統會猜測什麼時候顯示哪個問題。 –

+0

@MarcinCiesla'ContextCondition's不同,但都評估爲'true'。我將更新問題以更好地反映這一點。謝謝 – Bruno

+0

好吧,讓我們進一步處理您的情況。 您是否100%確定在您達到顯示模式時只有一種情況發生? 要實現正確的顯示模式,您需要確保只有滿足這個條件。 如果您將** A **條件和** B **條件設置爲true,則應用程序仍然令人困惑。 –

回答

0

您可以通過設置適當的指數確定其優先級:

DisplayModeProvider.Instance.Modes.Insert(0, new DefaultDisplayMode("a") 
{ 
    ContextCondition = context => AFunctionThatReturnsTrue() 
}); 

DisplayModeProvider.Instance.Modes.Insert(1, new DefaultDisplayMode("b") 
{ 
    ContextCondition = context => ADifferentFunctionThatReturnsTrue() 
}); 

這應保證模式一個即使滿足兩個條件纔可以提供。

編輯: 這不支持任何官方文件,但我在我的項目中試過,它的工作。

+0

嗯...這不適合我。另外我不明白這與僅僅改變'insert'的順序有什麼不同 – Bruno