2

我最近将 WPF 应用程序转换为使用 WCF 服务(为相关网站编写,旨在转换应用程序)。

一切都很好,除了我从模型中进行的一些实时数据绑定。

public decimal? SalePrice
    {
        get { return _salePrice; }
        set
        {
            _salePrice = value;
            TotalSalesPrice = value + _warranty;
        }
    }

在 References.cs 中,这变成

[System.Runtime.Serialization.DataMemberAttribute()]
    public System.Nullable<decimal> SalePrice {
        get {
            return this.SalePriceField;
        }
        set {
            if ((this.SalePriceField.Equals(value) != true)) {
                this.SalePriceField = value;
                this.RaisePropertyChanged("SalePrice");
            }
        }
    }

然后将使用 INotifyPropertyChanged 使表单保持最新。

解决这个问题的最佳方法是什么?

我已经为这个客户端功能编写了一个单独的类,但是有多个这样的类,这似乎是一种非常非语义和漫长的做事方式。我注意到它们是部分的,并试图使它们成为虚拟的,然后有一个 ovveride 客户端,但是虚拟属性在被序列化时被删除了。

非常感谢任何帮助,奥利

4

1 回答 1

1

您不应将生成的 DataContracts 用于数据绑定。我认为他们在生成的文件上实施 INotifyPropertyChanged 真的很遗憾,因为它鼓励人们做错事

数据契约只是根据服务对数据的视图。这不是您的表单/窗口必然需要的数据视图。

您应该将数据的服务表示视为您的模型,并将您的视图绑定到以最方便的方式呈现数据的 ViewModel。这也意味着随着服务的发展,您的数据绑定不会中断,并且您知道您必须做的所有更改都可以在视图模型中完成

于 2012-05-30T10:24:31.343 回答