Mvvm 从用户交互和服务事件两方面更新viewmodel的好模式是什么?

Mvvm 从用户交互和服务事件两方面更新viewmodel的好模式是什么?,mvvm,view,viewmodel,design-patterns,service-layer,Mvvm,View,Viewmodel,Design Patterns,Service Layer,考虑以下两种情况: 用户按下视图中的按钮(如履行订单),我们希望视图立即更新(禁用按钮、添加进度条等) 服务层引发一个业务事件,该事件最终必须反映在视图上(例如,产品已脱销) 这两种情况都需要某种机制X来更新viewmodel。使用MVVM,视图可以通过在事件处理程序中设置viewmodel的属性、通过命令绑定或其他机制来实现这一点 服务层可以使用某种机制来实现这一点,例如,在业务/域模型中引发事件、创建命令来操作viewmodel、调用viewmodel上的方法等 事实上,X和Y可能是相同

考虑以下两种情况:

  • 用户按下视图中的按钮(如履行订单),我们希望视图立即更新(禁用按钮、添加进度条等)
  • 服务层引发一个业务事件,该事件最终必须反映在视图上(例如,产品已脱销)
这两种情况都需要某种机制X来更新viewmodel。使用MVVM,视图可以通过在事件处理程序中设置viewmodel的属性、通过命令绑定或其他机制来实现这一点

服务层可以使用某种机制来实现这一点,例如,在业务/域模型中引发事件、创建命令来操作viewmodel、调用viewmodel上的方法等

事实上,X和Y可能是相同的机制(或模式)


有什么好的方法可以做到这一点,它符合MVVM的精神,但很枯燥?

我认为您需要选择一个MVVM框架,并遵循它支持的模式

一般而言:

  • 您的按钮将通过ICommand或MVVM框架支持的任何方法连接到ViewModel上的Fulfillower方法
  • “CanFulfillOrder”布尔属性将通过INotifyPropertyChanged连接以禁用按钮,这可以由FulfillOrder方法或您提到的事件触发。它还可以绑定到进度条上的可见性
  • 另一个属性可以在进度栏上提供百分比,并对其进行适当更新
一个好的通用MVVM框架是

如果您希望获得更强大的功能,并且能够处理更复杂的问题,请尝试


或者,如果您想使用dynamic并尝试一些前沿的东西,请尝试我的框架:。

我认为您需要选择一个MVVM框架,并遵循它支持的模式

一般而言:

  • 您的按钮将通过ICommand或MVVM框架支持的任何方法连接到ViewModel上的Fulfillower方法
  • “CanFulfillOrder”布尔属性将通过INotifyPropertyChanged连接以禁用按钮,这可以由FulfillOrder方法或您提到的事件触发。它还可以绑定到进度条上的可见性
  • 另一个属性可以在进度栏上提供百分比,并对其进行适当更新
一个好的通用MVVM框架是

如果您希望获得更强大的功能,并且能够处理更复杂的问题,请尝试


或者,如果您想使用dynamic并尝试一些前沿的东西,请尝试我的框架:。

您针对的是WPF、Silverlight还是其他技术?Silverlight目前正在使用,但我也对技术不可知模式感兴趣。也许这应该是一个单独的问题。你针对的是WPF、Silverlight还是其他技术?Silverlight目前,但我也对技术不可知模式感兴趣。也许这应该是一个单独的问题。我对这一部分很在行,但事件服务层呢。例如,缺货通知源于服务,而不是通过绑定的UI。您是否建议将outofstock命令添加到视图模型中?您的服务将实现一个接口,如IOutOfStockEvent,并实现一个C#事件。您的ViewModel将有一个IOutOfStockEvent实例,它可以访问并订阅事件,这与您在C#中通常使用的方式相同。当事件触发时,您将执行在C#中需要执行的任何工作。您也可以使用依赖项注入将IOutOfStockEvent传递到您的ViewModel。下面是我的开源项目示例中的一个链接,该链接演示了服务:它不使用事件,但您可以看到可以在
\mbService
上轻松创建事件并订阅它。这里有一些在ViewModel中使用两个服务的例子。好的,这很有意义。谢谢你的链接。NoMvvm看起来非常棒;即使使用CodeGen,MVVM也可能有点乏味。我对这一部分很在行,但事件服务层呢。例如,缺货通知源于服务,而不是通过绑定的UI。您是否建议将outofstock命令添加到视图模型中?您的服务将实现一个接口,如IOutOfStockEvent,并实现一个C#事件。您的ViewModel将有一个IOutOfStockEvent实例,它可以访问并订阅事件,这与您在C#中通常使用的方式相同。当事件触发时,您将执行在C#中需要执行的任何工作。您也可以使用依赖项注入将IOutOfStockEvent传递到您的ViewModel。下面是我的开源项目示例中的一个链接,该链接演示了服务:它不使用事件,但您可以看到可以在
\mbService
上轻松创建事件并订阅它。这里有一些在ViewModel中使用两个服务的例子。好的,这很有意义。谢谢你的链接。NoMvvm看起来非常棒;即使使用CodeGen,MVVM也可能有点乏味。