0

使用以下业务对象:

public class ItemsRow : BusinessObject<ItemsRow>
{
    public static readonly DependencyProperty ItemIdProperty = DependencyProperty.Register("ItemId", typeof(int), typeof(ItemsRow));
    public static readonly DependencyProperty DescriptionProperty = DependencyProperty.Register("Description", typeof(string), typeof(ItemsRow));

    public int ItemId
    {
        get { return (int)this.GetValue(ItemIdProperty); }
        set { this.SetValue(ItemIdProperty, value); }
    }

    public string Description
    {
        get { return (string)this.GetValue(DescriptionProperty); }
        set { this.SetValue(DescriptionProperty, value); }
    }
}

您将如何在模型中公开属性,看看属性如何已经是 DependencyProperty 的?

我想知道这样做是否有意义:

public class ItemModel: DependencyObject
{
    Item _item;

    public ItemModel(Item item) 
    {
        _item = item;
    }

    public static readonly DependencyProperty DescriptionProperty = Item.DescriptionProperty;

    public string Description
    {
        get { return _item.Description; }
        set { _item.Description = value; }
    }
}

这会按预期工作,还是模型必须拥有自己的一组 DependencyProperty,这些 DependencyProperty 由业务对象的 DependencyProperty 支持?或者可以稍微修改一下以使其正常工作吗?

4

1 回答 1

1

这是行不通的,因为依赖属性注册需要知道该属性是在哪种类型上定义的;这就是您将第三个参数传递给 register 方法的原因。到目前为止,仅凭这个原因,它就无法正常工作。但从理论上的 MVVM 设计角度来看,在模型中拥有一个与业务对象非常相似的单独对象是您选择拥有另一层抽象的权衡。您实际上是在购买冗余,以允许自己拥有另一层抽象,允许您在不更改模型的情况下交换业务对象。但是,如果您使您的模型对象依赖于您的业务对象实现的细节,那么您就违背了这个目的。在这种情况下,我会直接使用“业务对象”作为您的模型对象。

于 2012-12-26T06:58:10.103 回答