從您的評論,在我看來,你可能想要做的就是在你的視圖模型中顯示Event
object
類型的屬性。當視圖模型接收到事件時,它將Event
設置爲適合於該事件的類型的對象。在XAML中,你有這樣的:
<ContentControl Content="{Binding Event}"/>
,並在資源字典定義爲DataTemplate
要顯示的每個特定類型的事件。如果Event
爲空,則不顯示任何內容。如果Event
包含您爲DataTemplate
定義的對象,則會使用該模板顯示該對象。
是的,你需要爲每種類型的事件創建一個類(如果你還沒有的話)。
另一種方式是實現窮人的模板選擇:
<TextBlock Text="This is displayed if Foo contains 'BAR'">
<TextBlock.Style>
<Style TargetType="TextBlock">
<Setter Property="Visibility" Value="Collapsed"/>
<Style.Triggers>
<DataTrigger Property="Foo" Value="BAR">
<Setter Property="Visibility" Value="Visible"/>
</DataTrigger>
</Style.Triggers>
</Style>
</TextBlock.Style>
</TextBlock>
<TextBlock Text="This is displayed if Foo contains 'BAZ'">
<TextBlock.Style>
<Style TargetType="TextBlock">
<Setter Property="Visibility" Value="Collapsed"/>
<Style.Triggers>
<DataTrigger Property="Foo" Value="BAZ">
<Setter Property="Visibility" Value="Visible"/>
</DataTrigger>
</Style.Triggers>
</Style>
</TextBlock.Style>
</TextBlock>
這是一種愚蠢冗長,但它是一個簡單的方法來處理大量的互斥顯示選項。
感謝您的答案戴夫 - 真的很感激它!問題是這個屬性不是一個布爾值。這是一個字符串。基本上有一大堆事件可能發生(實際上有好幾百個!),所以我想更多的是鬆散地輸入這些信息,讓Xaml做一些事情: - 所以表達式的計算結果爲true,並將可見性設置爲true ... –
Slippy
2010-11-18 18:09:41
可見性有3個可能的值,您需要一個轉換器將其綁定到布爾值並選擇true/false手段爲摺疊/隱藏/可見。 – Matthieu 2010-11-18 18:11:55
乾杯Matthieu - 我希望避免一個轉換器,因爲我有一個無盡的無限的事件列表。如果你想做任何表情評估,我想轉換器必須被使用。 – Slippy 2010-11-18 18:17:59