【发布时间】:2010-05-07 10:08:24
【问题描述】:
我想根据枚举值显示不同的图标/图像。例如,如果我有以下枚举:
public enum UploadStatus
{
Unknown = 0,
WaitingToUpload = 10,
Uploading = 20,
Uploaded = 30,
UploadFailed = 40
}
我想编写如下所示的 XAML:
...
<EnumImage Value="{Binding Path=CurrentStatus}">
<EnumImageItem Value="Unknown" Image="/images/unknown.png" />
<EnumImageItem Value="WaitingToUpload" Image="/images/clock.png" />
<EnumImageItem Value="Uploading" Image="/images/upload.png" />
<EnumImageItem Value="Uploaded" Image="/images/tick.png" />
<EnumImageItem Value="UploadFailed" Image="/images/error.png" />
</EnumImage>
...
我发现很多帖子建议自定义 IValueConverters,但这些解决方案不符合 XAML 范例。
有什么指点或建议吗?
【问题讨论】:
-
值以何种方式转换不“符合 XAML 范式”?
-
好吧,我相信图像路径应该保留在 XAML 中,而不是 C# 代码中。在我看来的 IValueConverter 解决方案中,转换器负责将枚举值映射到图像路径。我看到将其全部保存在 XAML 中的更多好处。
-
ValueConverter 正是出于这个原因而存在的。它旨在获取数据类型并转换为视图。
-
@Stephan:是的,但是应该可以在 Xaml 中声明关系映射,同时使用转换器“执行”映射。
-
@AnthonyWJones 我完全同意,但这并不能改变这样一个事实,即无论他尝试什么,他都可能需要一个 ValueConverter。
标签: silverlight xaml enums