gpt4 book ai didi

c# - 避免大型交换机问题的良好做法

转载 作者:行者123 更新时间:2023-12-03 10:42:38 24 4
gpt4 key购买 nike

大家好

我正在研究使用MVVM设计显示卡的一些代码。

为了快速起见,这是我的一些代码示例。

这是我的ViewModel:

public sealed class CardViewModel : BindableBase
{
private int _id;
public int Id
{
get { return _id; }
set { SetProperty(ref _id, value); }
}

public CardViewModel(CardDTO card)
{
Id = card.Id;
}
}

CardDTO是我通过服务电话收到的某些转移对象。
这是代码。
public sealed class CardDTO
{
public int Id { get; set; }
}

在 View 中,每张卡根据其ID显示不同的图片。
为此,使用转换器。
public sealed CharIdToFillConverter : IValueConverter
{
public object Convert(object value, Type targetType, object parameter, CultureInfo culture)
{
var id = (int)value;

switch(id)
{
case 1:
return new ImageBrush(...);
case 2:
return new ImageBrush(...);
default:
throw new NotImplementedException();
}
}

public object ConvertBack(object value, Type targetType, object parameter, CultureInfo culture)
{
throw new NotImplementedException();
}
}

我不喜欢此代码中的开关。
有没有一种好的做法可以使它更清洁?
我应该使用多态性而不是Id属性吗?

谢谢

最佳答案

因为您的转换是单向的,并且您可能不需要测试笔刷(由于其简单的逻辑),并且我假设您想要最佳的性能,所以触发器是您的 friend 。不要过分依赖转换器,因为它们比触发器慢。 (more information regarding performance issues of converters in WPF)

您可以通过在ID上使用DataTrigger或通过使用多态来实现此目的(每个派生类型将具有其自己的样式或模板,WPF会根据要尝试可视化的对象的类型自动选择合适的样式或模板)

关于c# - 避免大型交换机问题的良好做法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49300782/

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