这可能是一个很长的问题,我会尽力正确提出。

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

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

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

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

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

我的第一种方法是将所有内容都存储在 UserControl 中,这很容易但效果不佳。
所以我发现可能的解决方案是将所有内容存储在其他地方,然后从 MainWindow 或其他地方访问那里。我非常努力地学习 MVVM 并在我的项目中使用它。但我一定是非常愚蠢,因为我无法理解。

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

我的问题:

1.这是正确的做法吗?如果 MVVM 是这种方式,我求求你,请在开始时给我一点指导,因为我无法将 MVVM 中那些复杂的例子翻译到我的项目中。

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

如果需要,我会发布代码、图片、更多信息。谢谢。

最佳答案



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

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

您的“UserControl1”部分可能是某种形式的 ItemsControl,绑定(bind)到源集合。然后可以将所选项目绑定(bind)到“我的数据”类上的某些内容,这决定了应显示哪个“绘图”。

直接回答您的问题:



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



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

另外,我知道您已经尝试学习和学习 MVVM - 最初很难掌握,但值得付出努力。我会说您的设计方案(实际上是左侧的“选项”列表和右侧的“详细信息” Pane )并不罕见 - 它实际上类似于我在 blog series on MVVM 中的示例,并且应该是一旦您了解了基础知识,就相当容易创建。

关于c# - 正确的应用程序设计 : data reading and UserControls,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/16900397/

10-15 02:33