WPF MVVM DataTemplate绑定

时间:2013-05-01 12:43:35

标签: wpf mvvm binding

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

1 个答案:

答案 0 :(得分:3)

你的数据模型是什么,你的ViewModel可以是不同的,它正是为了那个:)。 我喜欢使用装饰器模式将该类型的属性添加到我的业务对象。

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

   public bool IsActive { get; set; }

}

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

ViewModel不仅适用于您的View,而且可以管理业务对象的显示方式,不要害怕围绕它创建新类。