【问题标题】:Access the button of one xaml page from another xaml page从另一个 xaml 页面访问一个 xaml 页面的按钮
【发布时间】:2017-07-19 02:35:17
【问题描述】:

在我的 UWP 应用程序中,我有三个 xaml 页面。在第一个 xaml 页面中,我有一个按钮单击事件。我想从第三页访问此按钮单击事件。有可能吗?

【问题讨论】:

  • 你能分享你到目前为止所做的事情吗?
  • 有解决方案,但更重要的是:你不应该需要或想要这个,

标签: uwp windows-store-apps win-universal-app


【解决方案1】:

一般来说,你可以像这样在页面之间传递参数:

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 完成。

【讨论】:

    【解决方案2】:

    如果您熟悉 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?了解更多详情。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-06-10
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多