【问题标题】:Xamarin.Forms bindingContext in MVVMMVVM 中的 Xamarin.Forms bindingContext
【发布时间】:2019-10-10 06:55:57
【问题描述】:

进一步 This Question 关于 BindingContext

我正在查看一个实现 MVVM 的 Xamarin.Forms 项目,当我查看 XAML 页面时,例如 SomePage.xaml 并且我想找到具有该页面逻辑的 ViewModel,它通常很受欢迎并且错过了。

在更简单的 Xamarin.Forms 应用程序中,我只需查看 SomePage.xaml.cs 即可查看 bindingContext。

但在更大的应用程序中,这似乎是“在某处抽象”

例如在SomePage.xaml 我看到了:

x:Class="MyApp.SomePage"

但这通常不是包含代码的类,它似乎是 XAML 文件的代码表示

当我搜索SomePageViewModel.cs 时,我更幸运,但并非一直如此。

在代码中搜索术语bindingContext 没有结果。

我的问题是我还能在哪里寻找 bindingContext ,以确定哪些类包含控制 XAML 页面的代码。

似乎这在某种程度上被抽象了,因为我在代码中看到了BindableBase

【问题讨论】:

  • 如果在 .cs 或 .xaml 中没有设置 BindingContext,我会搜索页面的引用,因为他们可能会在推送页面之前创建页面并在那里设置上下文。
  • 它可以在 XAML 中设置,或者他们可以使用像 PRISM 这样的库来处理它。如果不知道您正在查看的具体示例,就不可能说出来。
  • @Jason 代码使用了PRISIM,使用PRISM的时候你一般在哪里找绑定?
  • @Nick 所以我认为可能存在一个声明页面及其绑定的类,但是当我按页面名称搜索时,我应该能够找到该文件,但事实并非如此.
  • 如果视图有一个父类,它可能被设置在那里。检查视图是如何在应用程序中实例化的。依赖注入之类的抽象可能会使查找依赖项变得更加困难。还有一种称为 ViewModel 的模式,其中 View 是在创建 ViewModel 的实例时创建的......

标签: c# xaml xamarin xamarin.forms


【解决方案1】:

来自PRISM docs

prism:ViewModelLocator.AutowireViewModel="True"

此视图 (MainPage.xaml) 已连接到视图模型 (MainPageViewModel.cs) 通过命名约定自动允许 用于数据绑定到视图模型。请参阅 ViewModelLocator 文档 了解更多信息。

在 Portable 项目中有一个 ViewModels 文件夹。这个文件夹 将包含所有与视图模型相关的代码。创建的模板 MainPage 的视图模型在此称为 MainPageViewModel.cs 文件夹。让我们看看这个类并分解发生了什么 在这里。

【讨论】:

    猜你喜欢
    • 2016-12-08
    • 1970-01-01
    • 2017-12-15
    • 2016-11-27
    • 1970-01-01
    • 2016-12-26
    • 2014-09-17
    • 1970-01-01
    相关资源
    最近更新 更多