Xamarin 表单从另一个视图获取数据

Posted

技术标签:

【中文标题】Xamarin 表单从另一个视图获取数据【英文标题】:Xamarin forms get data from another view 【发布时间】: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 【参考方案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 的任何导航机制。

以上是关于Xamarin 表单从另一个视图获取数据的主要内容,如果未能解决你的问题,请参考以下文章

在 LongPress 上显示 ContextMenu 以获取 xamarin 表单中的视图

Xamarin MVVM 从另一个页面删除 Listview 项目

不显示数据REST获取xamarin表单

无法从另一个视图控制器获取表视图数据

Xamarin - 点击时如何从列表视图中的 ImageCell 获取数据绑定字符串值?

如何在 Xamarin 表单的另一个视图中重用缓存的图像