我尝试刷新当前页面但无法执行此操作。基本上我使用用户控件并继承到另一个用户控件。按钮单击事件正常工作。但不刷新页面。
Page = (Application.Current.RootVisual as Frame).Content as Page;
string u = Convert.ToString(Page.NavigationService.CurrentSource);
Page.NavigationService.Navigate(new Uri(u, UriKind.Relative));
答案 0 :(得分:1)
此处的问题是您无法在UserControl
中使用导航,它必须来自Page
。
因此,在您的用户控件中创建一个这样的事件处理程序..
public event EventHandler Refresh;
现在,在您的页面中将Handle
设为..
MyUserControl.Refresh += UserControl_Refresh;
void MyUserControl_Refresh(object sender, EventArgs e)
{
//refresh logic here
}
然后在UserControl
中调用此Event
,其中
Refresh.Invoke(this, null);
它会起作用。
答案 1 :(得分:0)
只需在您希望刷新页面的任何活动中输入您想要的页面
NavigationService.Navigate(new Uri("/pagetorefresh.xaml", UriKind.Relative));
答案 2 :(得分:0)
您是否尝试删除BackStack
?
NavigationService.RemoveBackEntry();
How to reload a Windows phone application page without creating a new copy in the memory?
答案 3 :(得分:0)
如果要从UserControl导航到页面,则必须执行此操作
(Application.Current.RootVisual as PhoneApplicationFrame).Navigate(new Uri("/ProjectName;component/Pages/SignatureCapturePage.xaml", UriKind.Relative));
当您想要导航到页面的新实例(您居住在其中)时,您需要附加新的GUID
(Application.Current.RootVisual as PhoneApplicationFrame).Navigate(new Uri("/ProjectName;component/Pages/SignatureCapturePage.xaml?id="+Guid.NewGuid().ToString(), UriKind.Relative));
但是你的最终目的是刷新页面而不是导航到新页面,这样你就可以从UserControl触发页面中的事件或者去DataBinding。
DataBinding是最好的方法,当Usercontrol发生一些变化时,您可以使用INotifyPropertyChanged获得通知。见DataBinding for Windows Phone 8