c# - 绑定(bind)一个枚举

标签 c# wpf mvvm binding enums

我有一个枚举,每个值代表一个图像,例如:

public enum AnimalImages
{
    Cow,
    Cat,
    Dog
}

我还有一个转换器,它接受枚举并返回 ImageSource:

public object Convert(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture)
{
    return ResourceManager.Instance.GetImageFromEnum((AnimalImages)value);
}

我正在使用带有 MVVM 的 WPF;现在,我想将图像添加到我的 View 中。使用 Cow 枚举,我想要牛图像。我知道我可以向我的 ViewModel 添加一个属性并像这样调用它:

public AnimalImages CowImage
{
   return AnimalImages.Cow;
}

然后将其绑定(bind)到我的 UI。但是,我认为有更好的方法可以做到这一点。类似于以下内容(当然不起作用):

<Image Source="{x:Static images:AnimalImages.Cow}, Converter={StaticResource AnimalImagesImageBitmapSource}}"/>

有什么建议吗?

最佳答案

回答

如果 ViewModel 属性是枚举,则可以采用这种方法。它看起来像这样:

<!-- DataContext of the Image has to be the ViewModel -->
<Image Source="{Binding CowImage, Converter={StaticResource AnimalImagesImageBitmapSource}}"/>

替代方案

您还可以这样做,以便您的 ViewModel 属性 CowImage 实际上返回图像的 URIImageSource,这样您就不需要不需要转换器,它看起来“更干净”。

像这样:

ViewModel.cs

public ImageSource CowImage
{
    get 
    {
        return ResourceManager.Instance.GetImageFromEnum(AnimalImages.Cow);
    }
}

Xaml 文件

<Image Source="{Binding CowImage}"/>

关于c# - 绑定(bind)一个枚举,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20773317/

相关文章:

c# - 将 XML 反序列化为简单的单个数组

c# - 为什么 IL.Emit 方法要添加额外的 nop 指令?

android - 绑定(bind)变量为null..如何让UI中的观察者等待查询的Livedata从数据库中执行?

c# - 1对1关系EF两个外键报错

c# - 计算服务区域的最有效方法 Asp.net + SQL Server

WPF 弹出窗口出现在其他桌面窗口上,如何只出现在 WPF 主窗口的顶部?

wpf - 禁用切换按钮选择颜色

wpf - 如何在 ControlTemplate 中获取动画资源?

c# - 将连接字符串传递给 ViewModel 构造函数

c# - 如何在 WPF 的内容控件中为用户控件设置 Taborder?