请教关于Frame导航

手抓宝 2010-06-22 11:02:38
在页面中有一个Frame叫做MainFrame,然后在后台进行动态导航:


public void Nav_Click(string str)
{
MainFrame.Navigate(new Uri(str, UriKind.Relative));
}


str为相对URL路径

现在有个问题,正常导航都好用,但是假如两次传入的url相同时,那么第二次就不走被导航的页面的load方法或者构造函数.

例如,现在传入"/Views/ViewList",将导航至Views/ViewList.xaml页面,同时执行构造方法(或者load方法)来进行数据绑定.

当我在传入"/Views/ViewList"时,同样导航至Views/ViewList.xaml页面,但是不执行构造方法(或者load方法),所以数据无法更新.

当传入其他url后再传入该URL,导航正确,构造方法也能够正常执行.

请问如何解决?
...全文
121 6 打赏 收藏 转发到动态 举报
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
Sunpire 2010-06-23
  • 打赏
  • 举报
回复
我通过增加一个全局变量解决了问题, 在 Navigating 事件中调用 Refresh();


/// <summary>
/// 是否 ContentFrame 正在 Refresh() 当中
/// </summary>
bool isRefreshing = false;
private void ContentFrame_Navigating(object sender, NavigatingCancelEventArgs e)
{
if (e.Uri.Equals(this.ContentFrame.CurrentSource) && !this.isRefreshing)
{
e.Cancel = true; // 看不出作用,没有Cancel=true时也不会触发 Navigated 事件
this.isRefreshing = true;
this.ContentFrame.Refresh();
}
else if (this.isRefreshing)
{
this.isRefreshing = false;
}
}
手抓宝 2010-06-23
  • 打赏
  • 举报
回复
使用.Refresh()方法会提示Navigation to a null URI is not supported.
请问如何解决?
Sunpire 2010-06-22
  • 打赏
  • 举报
回复
[Quote=引用 3 楼 jv9 的回复:]
使用方法很简单,只需要 ContentFrame.Refresh();就可以了。
[/Quote]
呵呵,我今天是尝试在 ContentFrame.Navigating、ContentFrame.Navigated 这两个事件中使用 ContentFrame.Refresh() ,结果当然是 StackOverflow , 因为我是在 HyperLinkButton 中导航的,针对 HyperLinkButton 没有再侦听事件,不像LZ还有一个 Nav_Click() 。
jv9 2010-06-22
  • 打赏
  • 举报
回复
使用方法很简单,只需要 ContentFrame.Refresh();就可以了。
jv9 2010-06-22
  • 打赏
  • 举报
回复
在Silverlight 4中有Frame.Refresh方法可以解决你的问题。微软已经Navigation在相同URL时无法更新内容,在Silverlight 4中使用框架刷新的方法来更新数据。

详细看:http://msdn.microsoft.com/en-us/library/system.windows.controls.frame.refresh(VS.95).aspx
Sunpire 2010-06-22
  • 打赏
  • 举报
回复
同问。
在 Uri 相同时,Navigate() 实际上并没有改变 Content ,差不多是相当于没有执行。
似乎在 Navigating、Navigated 事件中解决不了这个现象,用 Refresh() 方法更不行。

冷大神支招。

8,731

社区成员

发帖
与我相关
我的任务
社区描述
WPF/Silverlight相关讨论
社区管理员
  • WPF/Silverlight社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧