首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >WPF - MVVM大模型或大视图模型

WPF - MVVM大模型或大视图模型
EN

Stack Overflow用户
提问于 2022-06-09 02:38:05
回答 1查看 205关注 0票数 0

我花了一些时间在WPF中搜索MVVM。我熟悉C#和WPF。我还理解MVVM及其好处。我真的不知道如何处理我的视图模型和模型,因为我看到的多个例子并不总是相同的。我知道MVVM是灵活的,您可以根据您的需要“调整”它。

我会解释我的申请内容,然后问我的问题。

我会简化交货和物品的手续。这两个表都来自SQL。我可以发出自己的SQL请求,并将行放入列表或观察集中,而不存在任何问题。在应用程序中,您有一个交付列表,当您选择一个时,它的所有项目都会出现在它旁边的另一个列表上。您可以添加/删除传递,添加/删除项目。您可以修改项目的数量。请注意,所有操作都会立即修改数据库。每个行动都有很多的验证。

我已经以一种不太好的方式构建了这个应用程序(只有一个MainWindow,其余的都在代码背后),我想使用MVVM重新构建它,即使它很难,因为它是正确的方法。

所以我要做的是有2个模型和2个视图模型(交付和项目)。我的旧应用程序有两个观察,所以我想重复使用它,以帮助我转移。我会把INotifyPropertyChanged放在视图模型中,或者为此建立一个基本的视图模型。

问题:

我应该在模型中和视图模型中进行观察吗?只有一个在视图模型中?简单的列表会更好吗?

这在一定程度上取决于第一个问题:我是否应该从我的ViewModel中的DB中收集数据,并将其放在观察中呢?在模型中这样做更好吗?我已经看到它应该在模型中,甚至在另一层。

这也取决于第一个问题:我应该把我的方法、视图模型或模型放在哪里?假设是AddDelivery()。我所做的就是将交付添加到我的观察选集中,并同时更新DB。那么,如果我在视图模型中只有一个观察到的结果,我需要在同一个地方使用我的方法?如果你让我做两次观察呢。

编辑

在我得到的帮助下,我成功地启动了我的新应用程序!

我现在被困在一个部分,一个视图模型如何与另一个视图模型通信?我在这两种型号中都有INotifyPropertyChanged。在选择送货时,我需要更改项目的observableCollection。我已经有了NotifyPropertyChanged,当我选择时,我只需要从ItemViewModel订阅事件或向它发送消息?

模型:

代码语言:javascript
运行
复制
    public class Delivery
    {
        public string name { get; set; }
        public string noDelivery{ get; set; }
    }


    public class Item
    {
        public string name { get; set; }
        public string noItem { get; set; }
    }

视图模型:

代码语言:javascript
运行
复制
    public abstract class ViewModelBase : INotifyPropertyChanged 
    {
  

        private void NotifyPropertyChanged([CallerMemberName] String propertyName = "")  
        {  
        PropertyChanged?.Invoke(this, new PropertyChangedEventArgs(propertyName));
        }  
    }
    
    public class DeliveryViewModel : ViewModelBase
    {
        public ObservableCollection<Delivery> Deliveries{ get; private set;}
        //Some Functions
    }


    public class ItemViewModel
    {
        public ObservableCollection<Item> Items { get; private set; }

        //Some Functions
    }

我在我的DeliveryViewModel中调用了DeliveryViewModel,但是我不知道另一个视图模型如何处理它。换句话说,当一个事件发生在ItemViewModel中时,我想从DeliveryViewModel调用一个函数。

EN

回答 1

Stack Overflow用户

发布于 2022-06-09 06:21:38

答案:

  1. ,您应该只根据最佳实践在视图模型中进行观察性选择。因为您的viewModel将连接到视图,而不是模型.

  1. ,您应该始终先从DB中收集数据。这就是问题分离是如何正确运作的。然后可以在ObservableCollection of您的ViewModel.

中添加相同的内容。

应该将直接与DB交互的

  1. (您的方法)放在模型中。添加传递详细信息后的最终列表将在ViewModel ObservableCollection中重新获取或更新,并为其分配新的Id。

始终遵循的关注点分离原则。因为MVVM都是关于的,松耦合的

谢谢。

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/72554153

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档