我对使用 Prism 的 WPF 和 MVVM 还很陌生,并且遇到了 Prism 导航问题。每次导航到特定视图时,我都想加载一个新视图;但是,如果我输入一些数据或完全处理一些数据,离开并返回,现有数据始终保留在视图中。
我在这里阅读过类似的问题,例如this和this。两者都指向使用INavigationAware
or IRegionMemberLifetime
。我试图在我的 ViewModel 中实现这两者;但是,似乎没有人为我解决这个问题。
如果我使用INavigationAware
并设置IsNavigationTarget
为 false,则视图永远不会加载。如果我使用IRegionMemberLifetime
并设置KeepAlive
为 false,它仍然会保留我的数据。
我可以发布代码;但是,它很简单,看起来与链接问题中的相同。有人对 Prism 导航有类似的问题吗?
任何帮助表示赞赏。
编辑 - 添加示例代码
为了摆脱我所拥有的其他代码的任何红鲱鱼,我创建了一个新的 Prism 应用程序,其中包含最基本的必需品。导航返回时视图不显示的问题已经解决;但是,视图仍保留输入的值。
这是一些示例代码:
模型:
public class SomeObject
{
public string ObjectName { get; set; }
}
我用两个 TextBox 控件创建了一个基本视图,1 个绑定,1 个不绑定:
<StackPanel>
<TextBlock Text="ModuleA" />
<TextBox Text="{Binding DisplayedSomeObject.ObjectName, UpdateSourceTrigger=PropertyChanged}" />
<TextBox />
</StackPanel>
视图模型:
[Export]
[PartCreationPolicy(CreationPolicy.NonShared)]
[RegionMemberLifetime(KeepAlive=false)]
public class ModuleAViewModel : BindableBase, IConfirmNavigationRequest, INavigationAware
{
private SomeObject displayedSomeObject = new SomeObject();
public SomeObject DisplayedSomeObject
{
get { return displayedSomeObject; }
set
{
displayedSomeObject = value;
}
}
[ImportingConstructor]
public ModuleAViewModel()
{
}
void IConfirmNavigationRequest.ConfirmNavigationRequest(NavigationContext navigationContext, Action<bool> continuationCallback)
{
continuationCallback(true);
}
bool INavigationAware.IsNavigationTarget(NavigationContext navigationContext)
{
return false;
}
void INavigationAware.OnNavigatedFrom(NavigationContext navigationContext)
{
}
void INavigationAware.OnNavigatedTo(NavigationContext navigationContext)
{
var newSomeObject = new SomeObject();
this.DisplayedSomeObject = newSomeObject;
}
}
当我运行它时,绑定和未绑定的控件在导航回时都会保留它们的值。