gpt4 book ai didi

c# - ViewManager.GetViewsOfViewModel始终返回null

转载 作者:行者123 更新时间:2023-12-03 10:35:26 24 4
gpt4 key购买 nike

我正在尝试使用Catel ViewManager注册和获取 View ,但是我没有从ViewManager.GetViewsOfViewModel获取 View

据我了解,当从可视树中卸载UserControl时,销毁了它,但是由于我使用CloseViewModelOnUnloaded = false,所以不会发生这种情况;

我举了一个小例子来说明这个问题。 TestApp

 public void ShowDocumentWindow<TViewModel>(object model = null) where TViewModel : DocumentItemViewModel
{
IViewModel vm = null;

if (model != null)
{
vm = this.viewModelManager.GetViewModelsOfModel(model).FirstOrDefault();
}

if (vm == null)
{
var viewModel = this.viewModelFactory.CreateViewModel<TViewModel>(model);
var viewType = this.viewLocator.ResolveView(viewModel.GetType());

var view = Activator.CreateInstance(viewType, viewModel);

this.documentHost.Items.Add(new DocumentPanel
{
Content = view,
IsActive = true,
MDIState = MDIState.Normal
});

this.viewManager.RegisterView((IView)view); // Registering
this.viewModelManager.RegisterModel(viewModel, model);
}
else
{
var view = this.viewManager.GetViewsOfViewModel(vm).FirstOrDefault() as UserControl; \\ but this I get null

var index = this.documentHost.Items.FindIndex(x =>
{
var documentPanel = x as DocumentPanel;
if (documentPanel != null)
{
return Equals(documentPanel.Content, view);
}

return false;
});

this.documentHost.SelectedTabIndex = index;
}
}

最佳答案

该 View 在卸载后即从“ Activity View ”(在ViewManager内部)中删除。它将 View 模型保存在内存中,以便再次加载时不会改变当前未使用 View 的事实。

一种解决方案是创建自己的IViewManager(所有内容都可以在Catel中插入),然后可以以某种方式创建“阈值时间段”,在该时间段中, View 并未真正删除,因此有机会重新加载 View 。

但是...我认为最好将状态存储在服务/内存对象中,并在再次加载 View 时还原状态并创建新的VM。

关于c# - ViewManager.GetViewsOfViewModel始终返回null,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31710049/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com