正确的应用程序设计:数据读取和UserControls

时间:2013-06-03 15:30:10

标签: c# wpf data-binding user-controls

这可能是一个很长的问题,我会尽力问它。

我想阅读包含大量数字数据的大型.txt文件。在每个文件中将有“通道”(30-50个通道,具有自己的名称,轴单位,当然还有数据)。所以我创建了一个包含该属性的class Channel,以及一个包含该通道列表的class File。它还有一个读取文件并将所有内容存储在列表中的方法。

我希望能够同时加载多个文件,为此我创建了一个UserControl,其中包含一个用于加载文件的按钮和一个显示每个频道的ComboBox

enter image description hereComboBox绑定到ObservableCollection) 数据存储在用户控件后面的代码中。因此,当我在MainWindow多个UserControls中插入时,我无法访问该数据。

我想要的是有几个UserControl ......

enter image description here

...并且能够在该绘图仪中绘制每个数据的数据,并能够进行某些控制(上一个,下一个..)

enter image description here

我的第一个方法是将所有内容存储在UserControl中,这很容易做但效果不佳。 所以我想出的可能是解决方案是将所有内容存储在其他地方,然后从MainWindow或其他地方访问。我已经尝试过非常难以学习MVVM并在我的项目中使用它。但我必须非常愚蠢,因为我无法得到它。

我的新方法将在下一个方案中描述:

enter image description here

我的问题:

1.这是正确的做法吗?如果MVVM是这样的话,拜托,求求你,请在一开始就引导我,因为我无法将MVVM的那些错综复杂的例子翻译成我的项目。

2.如果我或多或少做得对,我怎么能将所有数据存储在其他地方并从MainWindow访问它? (在我的File类中,我有一个存储所有列表的方法,所以在我的UserControl中我有“浏览”按钮获取文件名,然后使用read()方法将所有内容存储在(?){{1或者至少在我创建新文件的地方:File class)。

如果需要,我会发布代码,图片,更多信息,任何内容。感谢。

1 个答案:

答案 0 :(得分:2)

  

如果MVVM是这样的话,拜托,求求你,请在一开始就指导我一点,因为我无法将MVVM的那些错综复杂的例子翻译成我的项目。

至少在本质上,你已经在使用MVVM的一半了。这不是“方式”,但肯定是 (相当不错)的方式来处理这个问题。

为了使用MVVM类型的设计进行设计,您需要将“MY DATA”类设置为UserControl的DataContext。所有数据都将存储在那里(最好是ObservableCollection<T>而不是List<T>,因为这样可以更有效地处理绑定。)

您的“UserControl1”部分可能是某种形式的ItemsControl,绑定到一组源。然后,所选项目可以绑定到“我的数据”类中的某个内容,该类确定应显示哪个“情节”。

直接回答您的问题:

  

1.这是正确的做法吗?

这绝对是直接向右迈出的一步。将数据与控件分开存储是使应用程序更加灵活和可维护(以及MVVM的大目标)的关键支柱之一。

  

2.如果我或多或少做得对,我怎么能将所有数据存储在其他地方并从MainWindow访问它?

您可以通过将类设置为UserControl的DataContext和/或MainWindow来处理此问题。这允许您绑定到数据类的属性(实际上是MVVM术语中的ViewModel)。


另外,我知道你已经尝试过学习和学习MVVM - 而且最初很难掌握,但值得努力。我会说你的设计场景(实际上是左边的“选项”列表和右边的“详细”窗格)并不罕见 - 它实际上类似于我blog series on MVVM中的示例,一旦理解了基础知识,就应该很容易创建。