【发布时间】:2017-07-19 02:35:17
【问题描述】:
在我的 UWP 应用程序中,我有三个 xaml 页面。在第一个 xaml 页面中,我有一个按钮单击事件。我想从第三页访问此按钮单击事件。有可能吗?
【问题讨论】:
-
你能分享你到目前为止所做的事情吗?
-
有解决方案,但更重要的是:你不应该需要或想要这个,
标签: uwp windows-store-apps win-universal-app
在我的 UWP 应用程序中,我有三个 xaml 页面。在第一个 xaml 页面中,我有一个按钮单击事件。我想从第三页访问此按钮单击事件。有可能吗?
【问题讨论】:
标签: uwp windows-store-apps win-universal-app
一般来说,你可以像这样在页面之间传递参数:
Frame.Navigate(typeof(TargetPage), 19);
在TargetPage 上重写OnNavigatedTo 方法,如下所示:
protected override void OnNavigatedTo(NavigationEventArgs e)
{
if (e.Parameter != null)
{
var myAge = e.Parameter + 3;
}
}
在这种情况下,myAgevariable 的值应该是 19 + 3 = 22;
但是,当您的导航模型提供从多个页面(不传递任何参数)到当前页面的导航时,您必须检查e.Parameter 是否不是null。
另外,来自documentation 的最佳实践:
如果不使用,参数值可以是复杂类型 获取导航状态()。但是,您仍然应该只使用基本类型 为了避免框架导航导致的内存使用过多 堆栈持有对参数的引用。一种优选的方法是 不传递实际对象,而是传递一个标识符 可用于在目标登录页面中查找对象。例如, 而不是传递
Customer对象,而是传递对CustomerID,然后在导航后查找Customer完成。
【讨论】:
如果您熟悉 MVVM 模式。您可以从其他 ViewModel 调用方法。
例如像下面这样:
public class FirstViewModel:ViewModelBase
{
public RelayCommand buttonClickCmd { get; set; }
public FirstViewModel()
{
buttonClickCmd = new RelayCommand(Click);
}
public void Click()
{
Debug.WriteLine("Clicked");
}
}
public class ThirdViewModel:ViewModelBase
{
public RelayCommand ClickFromFirstCmd { get; set; }
public ThirdViewModel()
{
ClickFromFirstCmd = new RelayCommand(Click);
}
public void Click()
{
FirstViewModel firstviewmodel = new FirstViewModel();
firstviewmodel.Click();
}
}
您可以查看How to call functions in a main view model from other view models?了解更多详情。
【讨论】: