WPF MVVM DataTemplate绑定
问题描述:
在我的视图中,我显示了一个Items列表,其中一个是当前活动的项目。对于这些项目,我定义了一个Datatemplate。当前活动的项目作为ViewModel上的属性公开。WPF MVVM DataTemplate绑定
我想用不同的背景颜色显示当前活动的项目,所以我尝试创建一个IValueConverter并将转换器参数绑定到当前项目,将其与正在运行的项目进行比较并返回相应的画笔。但由于无法绑定转换器参数,因此我失败了。
我不想添加一个propery到我的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>
答
你的数据模型是什么,你的视图模型可以是不同的,这也正是该:)。 我喜欢使用装饰模式将该类型的属性添加到我的业务对象。
public class Decorator<T> : INotifyPropertyChanged
{
public T MyObject { get; set; }
...
public bool IsActive { get; set; }
}
如果在ViewModel类中需要许多新属性,创建一些MyItemViewModel类也可能很有用。
ViewModel不仅用于您的视图,而且用于管理业务对象的显示方式,不要害怕创建新的类。
不过,一个'IsActive'属于你的ViewModel。你有一个ViewModel类,或者这不是一个真正的MVVM问题吗? – 2013-05-01 12:48:32
我有一个视图的ViewModel(窗口本身),它将Observable Collection和ActiveItem公开到View中。 – metacircle 2013-05-01 12:51:09
我认为你应该有一个'ViewModel'的项目以及 – 2013-05-01 12:55:43