gpt4 book ai didi

c# - 图像路径是否应该使用 MVVM 存储在 VM 中

转载 作者:行者123 更新时间:2023-12-03 10:26:20 25 4
gpt4 key购买 nike

关闭。这个问题是opinion-based .它目前不接受答案。












想改进这个问题?更新问题,以便 editing this post 可以用事实和引用来回答它.

4年前关闭。




Improve this question




在 MVVM 场景中,View 负责显示 ViewModel。对 ViewModel 来说,如何做到这一点并不重要。

现在我想用图像(例如类似交通灯的图标)显示某些属性(例如状态)的值。

我发现的大多数示例都将不同版本图标的路径存储在 ViewModel 的属性中。并根据状态进行更改。然后将 View 中的绑定(bind)从图像源应用到所述属性。

这感觉不对。 ViewModel 不应该知道属性的渲染类型。据 ViewModel 所知,它可以呈现为任何事物(标签、测试、图像、颜色等)。

将 ViewModel 属性显示为图像/图标的正确 MVVM-WPF 方法是什么?因此,无需在 ViewModel 中存储图像路径/url。

最佳答案

在我看来,正确的方法是使用转换器。例如,要将状态值转换为图标,请使用 VM 中的枚举和图标路径的转换器。

所以在我们的模型中......

    public enum ResultType { Unknown, Good, Bad, Suspect };
public ResultType Type { get; set; }

然后是转换器
public class ResultTypeIconConverter : IValueConverter
{
public object Convert(object value, Type targetType, object parameter, CultureInfo culture)
{
if (value is Result.ResultType)
{
return GetIconPath((Result.ResultType)value);
}
return "Images/glyphicons-195-question-sign.png";
}

public object ConvertBack(object value, Type targetType, object parameter, CultureInfo culture)
{
throw new NotImplementedException();
}
public static string GetIconPath(Result.ResultType rt)
{
switch (rt)
{
case Result.ResultType.Bad:
return "pack://application:,,,/someassembly;component/Images/badresult.png";
case Result.ResultType.Good:
return "pack://application:,,,/someassembly.WPF;component/Images/goodresult.png";
case Result.ResultType.Suspect:
return "pack://application:,,,/someassembly.WPF;component/Images/suspectresult.png";
case Result.ResultType.Unknown:
return "pack://application:,,,/someassembly.WPF;component/Images/unknownresult.png";
default:
return "pack://application:,,,/PetroUtilitiesUI.WPF;component/Images/glyphicons-195-question-sign.png";
}
}
}

XAML 资源
    <local:ResultTypeIconConverter x:Key="IconConverter"/>

XAML 引用
    <Image Height="15" Width="15"  Source="{Binding Type, Converter={StaticResource IconConverter}}" DockPanel.Dock="Left"/>

所以这是非常干净的。模型对图标一无所知, View 对枚举一无所知。现在......是虚拟机或 View 的类型转换器的一部分吗?我把这个问题留给哲学家。

关于c# - 图像路径是否应该使用 MVVM 存储在 VM 中,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45514038/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com