C# 该模型应该如何在MVVM中实现?

C# 该模型应该如何在MVVM中实现?,c#,.net,mvvm,C#,.net,Mvvm,我正在创建一个与一个或多个服务通信的简单网络应用程序,因此我计划使用一些队列(用于传出消息和传入消息)、一个表、一个包含每个活动连接的状态的列表等:换句话说,这些是确保应用程序自身功能所需的数据结构 此应用程序还必须配备一个图形界面,显示应用程序本身的部分内部功能:例如,队列的填充状态、连接的状态(检测速度等)。。根据模型-视图-模型模式,模型由GUI中显示的数据组成:在此应用程序中,上述数据结构表示模型。换句话说,模型实现了应用程序的业务逻辑 ViewModel应该实现INotifyPrope

我正在创建一个与一个或多个服务通信的简单网络应用程序,因此我计划使用一些队列(用于传出消息和传入消息)、一个表、一个包含每个活动连接的状态的列表等:换句话说,这些是确保应用程序自身功能所需的数据结构

此应用程序还必须配备一个图形界面,显示应用程序本身的部分内部功能:例如,队列的填充状态、连接的状态(检测速度等)。。根据模型-视图-模型模式,模型由GUI中显示的数据组成:在此应用程序中,上述数据结构表示模型。换句话说,模型实现了应用程序的业务逻辑

ViewModel应该实现
INotifyPropertyChanged
接口,以便通知视图发生了更改,但是模型如何与ViewModel通信?阅读之后,我意识到,
INotifyPropertyChanged
接口是由模型实现的。解释得多一点,但有点让我困惑:

INotifyPropertyChanged-应进入ViewModel和Model(如果需要)

如果需要,为什么? 我应该什么时候实现这个接口? 我什么时候不应该实施它

此外,没有实现
INotifyPropertyChanged
接口:如果我使用它,我应该用实现该接口的类包装它吗

最后,模型应该是只读的,这意味着用户不能使用GUI更改内部数据结构的内容。如何做到这一点

  • INotifyPropertyChanged主要由ViewModel类实现。这是为了方便数据绑定,以便在修改属性时更新视图中绑定到ViewModel属性的UI控件。
    在MVVM设计模式中,关系非常简单,并且是单向的。视图知道它的ViewModel,而ViewModel知道该模型。如果模型已更新,则ViewModel需要以某种方式知道,以便能够反映更新并将其传播到视图中。一种方法是让模型实现INotifyPropertyChanged,并让ViewModel实现相应的事件处理程序。如果所有更改都是从UI驱动的,并被推回到模型中,那么这可能不是必需的

  • 你不能真的绑定到字典上。如果在您的案例中有效,那么使用ObservableCollection将是理想的。或者,您可以按照以下思路来实现一个可观察字典:

  • MVVM提供了模型与视图的分离,因此视图与模型之间不应有直接关系。ViewModel的实现控制了什么(如果有的话)会被写回您的模型

  • INotifyPropertyChanged主要由ViewModel类实现。这是为了方便数据绑定,以便在修改属性时更新视图中绑定到ViewModel属性的UI控件。
    在MVVM设计模式中,关系非常简单,并且是单向的。视图知道它的ViewModel,而ViewModel知道该模型。如果模型已更新,则ViewModel需要以某种方式知道,以便能够反映更新并将其传播到视图中。一种方法是让模型实现INotifyPropertyChanged,并让ViewModel实现相应的事件处理程序。如果所有更改都是从UI驱动的,并被推回到模型中,那么这可能不是必需的

  • 你不能真的绑定到字典上。如果在您的案例中有效,那么使用ObservableCollection将是理想的。或者,您可以按照以下思路来实现一个可观察字典:

  • MVVM提供了模型与视图的分离,因此视图与模型之间不应有直接关系。ViewModel的实现控制了什么(如果有的话)会被写回您的模型


  • 模型如何与ViewModel通信

    你想怎么做都行。在我们编写的大多数应用程序中,视图模型调用业务逻辑层(模型)。但是,如果需要立即通知视图模型(事件)模型的更改,可以在模型上实现INotifyPropertyChanged。或者您可以简单地让视图模型订阅模型上的事件

    此外,字典没有实现INotifyPropertyChanged接口:如果我使用它,我应该用实现该接口的类来包装它吗?

    您只需要更改视图模型实现INotifyProperty。视图模型(字典)中的属性将只调用NotifyPropertyChanged(或您的实现看起来像什么)

    最后,模型应该是只读的,这意味着用户不能使用GUI更改内部数据结构的内容。如何做到这一点?


    不要向用户提供让他们更改数据的功能。以一种方式进行绑定,或者干脆不向他们提供用于进行更改的API。

    模型如何与ViewModel通信

    你想怎么做都行。在我们编写的大多数应用程序中,视图模型调用业务逻辑层(模型)。但是,如果需要立即通知视图模型(事件)模型的更改,可以在模型上实现INotifyPropertyChanged。或者您可以简单地让视图模型订阅模型上的事件

    此外,字典没有实现INotifyPropertyChanged i