嗨,大家好,
我正在研究一些使用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; }
}
在视图中,每张卡根据其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属性吗?
谢谢
由于你的转换是单向的,你可能不需要测试画笔(因为它的逻辑很简单),我认为你想要最好的性能然后触发器是你的朋友。不要过多依赖转换器,因为它们比触发器慢。 (more information regarding performance issues of converters in WPF)
您可以通过在Id上使用DataTrigger或使用多态来实现此目的(每个派生类型都有自己的样式或模板,WPF会根据它尝试可视化的对象类型自动选择正确的样式或模板)