2009-05-17 31 views
1

我最近开始develping使用WPF和I'cant真的缠上了我的脑海以后的事周围的应用程序:WPF数据绑定到外部数据模型

我有我的应用程序的域模型是简单的POCO对象序列化到/从硬盘。然后我有WPF应用程序,我想将它绑定到模型的各个部分。我需要能够通知UI基础模型的变化(例如,实现INotifyPropertyChanged),但我想这样做,而不会干扰我的模型(阅读而不修改模型的当前实现)。除修改模型外,我如何实现更改通知? 我想这样做的原因是我在多个项目中共享模型,只有一个是WPF,我不想向模型添加不必要的代码。 我想到的一件事是创建模型的“复制”(使用INotifyPropertyChanges和BindingLists等),但似乎很难维护... 在此先感谢。

的Ondrej

+0

我对这个完美的解决方案,这涉及制作修改高速缓存使用反射,并使用TypeDescriptor使适配器看起来就像原来的对象绑​​定...除了原作者网站崩溃,他没有把这篇文章备份:(我想看看我能否让他把它,否则我可能不得不写一篇类似的文章...... – 2009-05-17 16:03:32

回答

0

我看到这里有两个可能的解决方案:

  1. 使用WPF只有一个屏幕单独的模型(MVVM pattern)。这将需要维护两个不同的模型,也是要准备大量的映射代码。
  2. 使用PostSharp通过所有必要的样板代码“增强”您的模型。 Here你可以找到自动INotifyPropertyChanged实现的例子。请记住,将PostSharp引入项目是一个重要的决定,所以我建议先熟悉它。
2

检查了这一点MVVM

下载它的源代码中看到的层次结构。

基本上你仍然保持简单的POCO对象作为你的模型。然后创建一个视图模型的模型像这样身边:

public class CustomerViewModel : INotifyPropertyChanged 
{ 
     readonly Customer _customer; 
     public CustomerViewModel(Customer customer) 
     { 
      _customer = customer; 
     } 

     public string FirstName 
     { 
      get { return _customer.FirstName; } 
      set 
      { 
       if (value == _customer.FirstName) 
        return; 

       _customer.FirstName = value; 

       OnPropertyChanged("FirstName"); 
      } 
     } 
     ... 
}