gpt4 book ai didi

c# - UI 和模型共享和更新同一个类实例

转载 作者:行者123 更新时间:2023-12-03 10:46:09 24 4
gpt4 key购买 nike

我对 WPF 比较陌生,每当我被要求为我的项目创建 UI 时,我都会做一些有效的事情,但我几乎不认为它是由书本完成的。

现在我有一个项目,其中包含三个(主要)组件:

  • 用户界面(MainWindow)
  • 保存数据的自定义类(我们称之为 EntriesArray 类)
  • 从 SQL ( Model )
  • 获取数据的引擎

    EntriesArray 类具有一些属性,如下所示:
    internal class EntriesArray
    {
    public string[] values { get; set; }
    public bool newEntrySql { get; set; }
    public bool newEntryUi { get; set; }
    }

    我试图搜索我应该如何组织这个应用程序,发现它可能使用 MVVM 的规则。但是,我还没有找到这三个组件之间的确切相关性以及如何使 ModelUI读取/写入 EntriesArray 的同一实例.更准确地说,我只想拥有一个 EntriesArray应该由 Model 更新的实例(每当 SQL 服务器上有新条目时,它应该获取它们并添加到原始 EntriesArray 并将这些新条目的属性 newEntrySqlNewEntryUi 设置为 true ,同时设置 newEntrySql false 的旧条目的属性)和 MainWindow (每当用户最小化窗口时,数组中的所有条目都应将 newEntryUiEntriesArray 属性设置为 false )。

    我应该如何接近那个?

    最佳答案

    你是在正确的轨道上,但这种方法有点偏离。

    您拥有正确的 View 和模型,但听起来与 View 模型有点混淆。 View Model 保存并管理 UI 显示的所有数据。它还充当您的 UI 作用于模型的中间人(通过命令)。

    您的 UI 通常会创建 View 模型的实例,然后创建模型的实例,或者使用定位器模式获取现有实例。在理想的世界中,模型不知道 View 模型,模型只是响应函数调用并引发事件。

    您的 View 模型似乎特别偏离,因为您的所有数据都存储在一个通用的“值”集合中,以及谁更新了什么。您应该更新特定的命名变量和对象类型。来自模型,INotifyPropertyChanged应该负责更新 UI。反过来,对 View 模型数据执行更新的代码应该同时调用模型来更新您的数据库。

    如果您需要澄清,请告诉我。

    回复后续评论:

  • EntriesArray就目前而言,它不是一个好的 ViewModel,但它是一个开始。它肯定是在尝试在您当前的系统中扮演该角色。我不会让模型创建它。一般来说,在 MVVM 中,Views 了解 View Models,View Models 了解 Models。不存在其他知识。
  • 不,当您在 View 中创建绑定(bind)时,框架会为您订阅事件。我个人使用和喜欢this执行。
  • 要触发“新条目”样式事件,请使用 ObservableCollection<T>收藏,并绑定(bind)ItemsSource属性(property)给它。该集合实现 INotifyCollectionChanged并且框架将更新 ListBox或您绑定(bind)到 ObservableCollection<T> 的任何控件为你。
  • 如果您有 Entry类,具有在创建时设置为 true 的"new"属性(并使用该属性使其变为粗体),这很好。重复检查应该作为数据验证的一部分进行,我看不到标志在哪里可以得到任何东西。

  • 一般来说,你需要记住,在 MVVM 中, View 上的一切都是由一些 驱动的。数据 在 View 模型中。您正在寻找在对象中建模您的编程“世界”,然后您可以将控件绑定(bind)到以进行显示。

    关于c# - UI 和模型共享和更新同一个类实例,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25650977/

    24 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com