【发布时间】:2014-06-14 04:44:39
【问题描述】:
我正在开发一个 WinRT 应用程序,该应用程序目前包含两个页面。在第一页中,用户单击一个按钮,将他/她引导到第二页,在那里他做出需要传递回调用页面的选择。如何将数据传回调用页面?
【问题讨论】:
标签: windows-runtime
我正在开发一个 WinRT 应用程序,该应用程序目前包含两个页面。在第一页中,用户单击一个按钮,将他/她引导到第二页,在那里他做出需要传递回调用页面的选择。如何将数据传回调用页面?
【问题讨论】:
标签: windows-runtime
使用视图模型。查看Mvvm Light(在 Nuget 上可用)。使用双向绑定在 ViewModel 中设置数据,然后当您返回另一个页面时,从同一个 ViewModel 中检索数据。还有很多guides for using Mvvm on Channel 9。
【讨论】:
可以使用 Behaviors SDK (XAML) 在页面之间导航,具体来说是使用参数的 NavigateToPageAction。某篇文章here
你可以参考一下
xmlns:interactivity="using:Microsoft.Xaml.Interactivity"
xmlns:core="using:Microsoft.Xaml.Interactions.Core"
并以这种方式使用它
<interactivity:Interaction.Behaviors>
<core:EventTriggerBehavior EventName="Click">
<core:NavigateToPageAction TargetPage="Presentation.Views.ArticleDetailView" Parameter="{Binding Id}"/>
</core:EventTriggerBehavior>
</interactivity:Interaction.Behaviors>
您可以通过某些事件(在本例中为 Click 事件)添加此行为,并将 Id 发送到第二页。在此页面中,您可以在后面的代码中处理此参数。它不是那么面向 MVVM,但您可以尝试。你不必使用接口INavigateAble,你可以直接使用你的ViewModel。
private INavigateTo<int> NavigationViewModel()
{
return DataContext as INavigateTo<int>;
}
protected override void OnNavigatedTo(NavigationEventArgs e)
{
var navigationViewModel = NavigationViewModel();
var parameter = e.Parameter as int?;
if (navigationViewModel != null && parameter != null)
{
navigationViewModel.SetParameter(parameter)
}
base.OnNavigatedTo(e);
}
但是,如果您只想发送数据而不是导航回您的第一页,则可以作为参数传递,例如一些 Action 回调方法,可以在第二页调用,在第一页设置一些值。
【讨论】: