Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/288.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# WPF数据绑定:数据库还是对象?_C#_Wpf_Database_Data Binding_Object - Fatal编程技术网

C# WPF数据绑定:数据库还是对象?

C# WPF数据绑定:数据库还是对象?,c#,wpf,database,data-binding,object,C#,Wpf,Database,Data Binding,Object,我正在尝试创建以下内容: Tag1具有对象的有序列表:O1、O3、O2。 Tag2具有对象的有序列表:O1,O4 每次单击标记时,我都希望看到对象列表。因此,单击Tag1将在列表框中显示: O1 臭氧 氧气 但是我想保持自动更新,这样每次我编辑或添加/删除对象时它都会自动更新(我想我需要实现类似接口INotifyCollectionChanged和INotifyPropertyChanged?) 我可以使用一个数据库,让表Tag、Object和TagObject,最后一个表带有TagID和O

我正在尝试创建以下内容:

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

每次单击标记时,我都希望看到对象列表。因此,单击Tag1将在列表框中显示:

  • O1
  • 臭氧
  • 氧气
但是我想保持自动更新,这样每次我编辑或添加/删除对象时它都会自动更新(我想我需要实现类似接口
INotifyCollectionChanged
INotifyPropertyChanged
?)

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

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

有人对如何做到这一点有什么建议吗


谢谢。

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

然后,您的对象将必须公开一个可以设置为datacontext并绑定的dataview


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

将控制更新数据的所有逻辑移出WPF页面,并移入另一个类,该类在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
  }
}

这是GUI构造中非常常见的模型-视图-控制器模式之一。这涵盖了这些概念。

谢谢你,约翰。但是数据集没有实现ICollectionChanged。当我向一个表中添加一行时,屏幕是否会更新?尽管看起来很奇怪,而且即使它没有实现ICollectionChanged,它也能工作。我想这是因为它不是一个集合,而是一个基于XML的对象。