在我的视图中,我显示了一个Items列表,其中一个是当前活动的项目。对于这些项目,我定义了Datatemplate。当前活动的项目在ViewModel上公开为属性。
我想显示具有不同背景颜色的当前活动项目,因此我尝试创建IValueConverter并将转换器参数绑定到当前项目,将其与正在运行的项目进行比较并返回相应的Brush。但由于无法绑定转换器参数,我失败了。
我不想在我的Item类中添加一个属性(例如bool IsActive),因为这并不属于我的数据模型。
如何实现我想要的结果?
视图模型:
public ObservableCollection<Item> Items {get;set;}
public Item ActiveItem {get; set;}
查看:
<DataTemplate DataType="{x:Type model:Item}">
<Border Margin="3"
BorderBrush="DimGray"
BorderThickness="1"
CornerRadius="2"
Padding="3"
Background={Binding ???}
>
...
</DataTemplate>
答案 0 :(得分:3)
你的数据模型是什么,你的ViewModel可以是不同的,它正是为了那个:)。 我喜欢使用装饰器模式将该类型的属性添加到我的业务对象。
public class Decorator<T> : INotifyPropertyChanged
{
public T MyObject { get; set; }
...
public bool IsActive { get; set; }
}
如果在ViewModel类中需要很多新属性,那么创建一些MyItemViewModel类也很有用。
ViewModel不仅适用于您的View,而且可以管理业务对象的显示方式,不要害怕围绕它创建新类。