这可能是其中一个问题,答案真的应该太明显,不容错过。不过,我似乎无法弄清楚为什么我的“游戏和学习”应用程序的行为方式。
在我的Mainpage.xaml
上,我有一个StackPanel
,其中包含多个HyperlinkButtons
,导航到一组NavigationPages
。还有NavigationFrame
个UriMapper
来保存“页面”。
<StackPanel Background="Black" Orientation="Horizontal" Grid.Row="0">
<HyperlinkButton Name="Home"
TargetName="MainPageFrame" NavigateUri="/Home"
Foreground="White" FontWeight="Bold" Content="Home" />
<HyperlinkButton Name="Users"
TargetName="MainPageFrame" NavigateUri="/Users"
Foreground="White" FontWeight="Bold" Content="Users" />
<HyperlinkButton Name="Store" Foreground="White" FontWeight="Bold" Content="Store"
TargetName="MainPageFrame" NavigateUri="/Stores"/>
</StackPanel>
<navigation:Frame x:Name="MainPageFrame" Grid.Row="1" Source="/Home" HorizontalAlignment="Stretch" VerticalAlignment="Stretch" JournalOwnership="Automatic">
<navigation:Frame.UriMapper>
<uriMapper:UriMapper>
<uriMapper:UriMapping Uri="/{pageName}" MappedUri="/Views/{pageName}.xaml"/>
</uriMapper:UriMapper>
</navigation:Frame.UriMapper>
</navigation:Frame>
这是问题所在。当我在页面之间来回走动时(即:点击商店,用户并回到商店),然后创建两个商店页面。虽然乍看之下在应用程序中看不到,但当我从商店页面打开子窗口时,问题就会自行实现。
当我使用MVVM光消息来通知子窗口应该打开时,...我得到两个子窗口(或者每次我从超链接按钮进入商店导航页面时都有一个窗口)。
我假设在点击超链接按钮的同时,你只有一个NavigationPage ..或者至少在离开导航页时当前被破坏了。
我错过了哪些明显的东西?
答案 0 :(得分:2)
问题很可能在于注册消息处理程序。 MVVM Light Messenger存在一个已知问题,导致对象处理消息未正确发布。
解决方案非常简单 - 假设您的视图处理消息 - 您的代码应该看起来像这样:
public StoreView() {
Messenger.Default.Register<NotificationMessage>(this, (m) => {
// some message handling
});
InitializeComponent();
}
现在修改它,使其看起来与此类似:
public StoreView() {
Messenger.Default.Register<NotificationMessage>(this, (m) => {
// some message handling
});
InitializeComponent();
this.Unloaded += (sender, args) => {
Messenger.Default.Unregister(this);
};
}
unloaded事件中的代码可确保正确取消注册消息处理程序。对于ViewModels
中的消息,请确保调用Cleanup
方法。