2009-01-24 46 views
1

我试图创建这个:WPF数据绑定:数据库还是对象?

Tag1具有对象的有序列表:O1,O3,O2。 Tag2具有对象的有序列表:O1,O4。

每次我点击一个标签,我想看到对象列表。所以点击Tag1中会在列表框中显示:

  • O3
  • O2

但我想保持自动更新,以便每次我编辑或添加时间/删除对象它自动更新(我想我需要实现类似接口INotifyCollectionChangedINotifyPropertyChanged?)。

我可以使用一个数据库,并有Tag,Object和TagObject表,最后一个TagID和ObjectID。但我也想避免数据库,因为它是一个桌面应用程序。

我也可以使用像ObservableCollections这样的对象,但我有重复对象的问题。我可以使用对象的引用,但它会变得混乱。

任何人有任何建议如何做到这一点?

谢谢。

回答

1

一个选项是创建一个包含数据集(System.Data名称空间)的对象。在数据集内部,它将有3个表,它们将使用定义的外键链接,就像它在数据库中一样。如果需要,这些可以稍后存储到XML中。

然后,您的对象必须公开一个可以设置为datacontext并绑定的数据视图。

在代码中编辑数据集,然后更新屏幕和编辑屏幕将更新数据集。

+0

谢谢约翰。但DataSet不实现ICollectionChanged。当我向一张桌子添加一行时,屏幕是否更新? – 2009-01-24 17:35:07

1

把所有的逻辑控制了WPF页面,进入了另一类新的数据到WPF页面,当它改变时,而不是WPF 出来的数据对象的更新数据。

下面是一些示例代码:

class WpfPage 
{ 
    public List OrderedListForTag1 { set { /* whatever GUI binding code you need to deal with the new list for tag 1 */ } 


    public List OrderedListForTag2 { set { /* whatever GUI binding code you need to deal with the new list for tag 2*/ } 

} 

class WpfPresenter 
{ 
    WpfPage thePage; 

    public void Tag1Selected() 
    { 
     //Calculate changes to 01, 02, 04 etcetce 
     //If changed, update the page 
     thePage.OrderedListForTag1 = //new list of objects 
    } 
} 

这是模型 - 视图 - 控制器模式(一个或多个),这是在图形用户界面构造非常常见的一种。这series of articles涵盖的概念。