我只想询问是否可以访问ViewModel's
后端中的View
数据?
基本上我只需要检查是否设置了ViewModel's
属性(当用户选择某个内容时会设置),如果不是,我只是将用户重定向到另一个View
告诉他他需要先选择一些东西。这是一个糟糕的设计实践还是没关系,只是为了这样的小检查?真的不想实现静态类并将数据外推到它,而是检查它。
与此密切相关的另一个问题是,我可以从View
(当View
关闭时)调用一个方法,从IoC容器中取消注册该特定ViewModel
(这ViewModel
不是单身人士)。另一种方法是在ViewModel
关闭时将视图中的消息发送到View
,当ViewModel
获取该消息时,它会取消注册。我试图解决的问题是,每次请求ViewModel
时它都必须是一个新的,但我的IoC容器会缓存它们,使我的程序成为内存耗尽。所有ViewModels
都会在应用程序退出时释放,这意味着即使很可能不需要x ViewModels
,它们仍然存在于缓存中。
答案 0 :(得分:1)
基本上我只需要检查是否设置了
ViewModel's
属性(当用户选择某个内容时会设置),如果不是,我只是将用户重定向到另一个View
告诉他他需要先选择一些东西。这是一个糟糕的设计实践还是没关系,只是为了这样的小检查?
检查某些ViewModel
属性的值并反映View
方面的更改似乎没有错。 WPF数据绑定机制可以将View
状态“绑定”到ViewModel
状态:Binding
,Triggers
(Trigger
,DataTrigger
,EventTrigger
),Commands
(包括EventToCommand
)等
但有时使用UI服务来处理ViewModel
本身的ViewModel
状态更改很有用。例如,可以引入IWindowService
接口以允许从ViewModel
实现的上下文中打开窗口。
与此密切相关的另一个问题是,我可以从
View
(当View
关闭时)调用一个方法,从IoC容器中取消注册该特定ViewModel
(这ViewModel
不是单身人士。)...
我试图解决的问题是,每次请求
ViewModel
时它都必须是一个新的,但我的IoC容器会缓存它们,使我的程序成为内存耗尽。所有ViewModels
都会在应用程序退出时释放,这意味着即使很可能不需要xViewModels
,它们仍然存在于缓存中。
当注册被指定为“每次呼叫行为的解决”(而不是“单身行为”)时,所描述的依赖性容器“缓存效应”似乎很奇怪。请检查注册是否已指定为“按呼叫行为解析”(例如,Unity Container Lifetime Managers中的PerResolveLifetimeManager
)。
存在ViewModel
生存期问题,因为使用了SimpleIoC容器。
我想建议使用另一个依赖注入容器(具有适当的生命周期管理),以使实现不那么复杂和容易出错。
但是,如果强烈需要使用SimpleIoC容器,可以使用以下方式实现某种ViewModel
生命周期管理:
SimpleIoc.Default.GetInstance<ViewModel>(key);
方法调用以解析ViewModel
; SimpleIoc.Default.Unregister(key);
在不再需要实例(Closed
事件等)时取消注册该实例。