【问题标题】:Xamarin forms get data from another viewXamarin 表单从另一个视图获取数据
【发布时间】:2022-01-18 05:23:50
【问题描述】:

我有 2 个视图。在主要的一个中,我输入了书架的条形码和书籍的条形码,我将它们放在先前扫描的书架上。输入图书条形码后,它会在“输入”字段中显示图书名称。 还有一个按钮可以打开第二个视图,我可以在其中将新书添加到数据库(id、名称、作者和生成条形码)。

如何从第二个视图中获取生成的条形码和书名并在主视图中使用?

【问题讨论】:

  • 你在使用像 Prism 这样的框架吗?你在使用 MVVM 架构吗?你的代码是什么样的?没有任何细节很难提供答案。
  • 是的,很抱歉。我同时使用 Prism 和 MVVM。由于第二个视图尚未实现,并且主视图不包含与我的问题相关的任何内容,因此很难提供代码
  • 如果您使用的是 PRISM,添加该标签以便人们了解会很有帮助。如果没有代码,我们只能提供一个通用示例。或者,您可以参考来自 PRISM 的数十个样本或此处和 Xamarin 文档中的数百个样本。请记住,Xamarin 页面只是 C# 类 - 您可以在构造函数中传递数据、使用属性和方法、自定义事件等。
  • Here is an answer 使用 Prism,显示如何将数据传递到第二个视图。应该可以使用它的技术来取回该数据。一种技术是将Action callMeBack 传递给第二个视图。当第二个视图有结果时,它会执行callMeBack(theResult);,从而执行主视图想要使用该结果执行的任何操作。另一种方法是在第二个视图中创建一个event,主视图将(+=)添加一个event handler

标签: c# xamarin.forms prism


【解决方案1】:

我最近在子页面的构造函数中传递了一个回调Action 来做这件事(正如@ToolmakerSteve 在 cmets 中提到的那样)。这是一个例子:

public class MainPage : ContentPage {
    public MainPage() {}

    private async Task OpenChildPageAsync(){
        var page = new ChildPage(AddNewBook);
        await Navigation.PushAsync(page);
    }

    private void AddNewBook(Book newBook){
        //do something with the new book
    }
}

public class ChildPage : ContentPage {

    private readonly Action<Book> _callback;

    public ChildPage(Action<Book> callback)
    {
        _callback = callback;
    }

    public void OnBookSelected(Book selectedBook){
        //this method might be called when a Book is selected in the UI for example
        _callback?.Invoke(selectedBook);
    }
}

public class Book {
    public string Code { get; set; }
    public string Title { get; set; }
}

【讨论】:

  • 棱镜还是没有棱镜?在 Prism 的上下文中,NavigationINavigationService 有什么好处?
  • 我使用的是 Xamarin.Forms 附带的默认 INavigation,但您也可以使用 Prism 的任何导航机制。
猜你喜欢
  • 1970-01-01
  • 2019-05-23
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-07-26
相关资源
最近更新 更多