我花了一些时间在WPF中搜索MVVM。我熟悉C#和WPF。我还理解MVVM及其好处。我真的不知道如何处理我的视图模型和模型,因为我看到的多个例子并不总是相同的。我知道MVVM是灵活的,您可以根据您的需要“调整”它。
我会解释我的申请内容,然后问我的问题。
我会简化交货和物品的手续。这两个表都来自SQL。我可以发出自己的SQL请求,并将行放入列表或观察集中,而不存在任何问题。在应用程序中,您有一个交付列表,当您选择一个时,它的所有项目都会出现在它旁边的另一个列表上。您可以添加/删除传递,添加/删除项目。您可以修改项目的数量。请注意,所有操作都会立即修改数据库。每个行动都有很多的验证。
我已经以一种不太好的方式构建了这个应用程序(只有一个MainWindow,其余的都在代码背后),我想使用MVVM重新构建它,即使它很难,因为它是正确的方法。
所以我要做的是有2个模型和2个视图模型(交付和项目)。我的旧应用程序有两个观察,所以我想重复使用它,以帮助我转移。我会把INotifyPropertyChanged放在视图模型中,或者为此建立一个基本的视图模型。
问题:
我应该在模型中和视图模型中进行观察吗?只有一个在视图模型中?简单的列表会更好吗?
这在一定程度上取决于第一个问题:我是否应该从我的ViewModel中的DB中收集数据,并将其放在观察中呢?在模型中这样做更好吗?我已经看到它应该在模型中,甚至在另一层。
这也取决于第一个问题:我应该把我的方法、视图模型或模型放在哪里?假设是AddDelivery()。我所做的就是将交付添加到我的观察选集中,并同时更新DB。那么,如果我在视图模型中只有一个观察到的结果,我需要在同一个地方使用我的方法?如果你让我做两次观察呢。
编辑
在我得到的帮助下,我成功地启动了我的新应用程序!
我现在被困在一个部分,一个视图模型如何与另一个视图模型通信?我在这两种型号中都有INotifyPropertyChanged。在选择送货时,我需要更改项目的observableCollection。我已经有了NotifyPropertyChanged,当我选择时,我只需要从ItemViewModel订阅事件或向它发送消息?
模型:
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; }
}
视图模型:
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调用一个函数。
发布于 2022-06-09 06:21:38
答案:
中添加相同的内容。
应该将直接与DB交互的
。
始终遵循的关注点分离原则。因为MVVM都是关于的,松耦合的。
谢谢。
https://stackoverflow.com/questions/72554153
复制相似问题