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 的上下文中,Navigation
比 INavigationService
有什么好处?
我使用的是 Xamarin.Forms 附带的默认 INavigation,但您也可以使用 Prism 的任何导航机制。以上是关于Xamarin 表单从另一个视图获取数据的主要内容,如果未能解决你的问题,请参考以下文章
在 LongPress 上显示 ContextMenu 以获取 xamarin 表单中的视图
Xamarin MVVM 从另一个页面删除 Listview 项目