2013-05-01 115 views
0

在我的视图中,我显示了一个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> 
+1

不过,一个'IsActive'属于你的ViewModel。你有一个ViewModel类,或者这不是一个真正的MVVM问题吗? – 2013-05-01 12:48:32

+0

我有一个视图的ViewModel(窗口本身),它将Observable Collection和ActiveItem公开到View中。 – metacircle 2013-05-01 12:51:09

+1

我认为你应该有一个'ViewModel'的项目以及 – 2013-05-01 12:55:43

回答

3

你的数据模型是什么,你的视图模型可以是不同的,这也正是该:)。 我喜欢使用装饰模式将该类型的属性添加到我的业务对象。

public class Decorator<T> : INotifyPropertyChanged 
{ 
    public T MyObject { get; set; } 
    ... 

    public bool IsActive { get; set; } 

} 

如果在ViewModel类中需要许多新属性,创建一些MyItemViewModel类也可能很有用。

ViewModel不仅用于您的视图,而且用于管理业务对象的显示方式,不要害怕创建新的类。