【问题标题】:Binding one enum绑定一个枚举
【发布时间】:2013-12-25 13:32:17
【问题描述】:

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

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;现在,我想将图像添加到我的视图中。使用Cow 枚举,我想要牛图像。我知道我可以向我的 ViewModel 添加一个属性并像这样调用它:

public AnimalImages CowImage
{
   return AnimalImages.Cow;
}

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

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

有什么建议吗?

【问题讨论】:

标签: c# wpf mvvm binding enums


【解决方案1】:

回答

如果 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}"/>

【讨论】:

    【解决方案2】:

    你快到了。只需要使用Binding and pass static value as Source

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

    【讨论】:

      猜你喜欢
      • 2016-09-15
      • 2016-03-26
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多