从您的评论,在我看来,你可能想要做的就是在你的视图模型中显示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