如何在 Windows Phone 上执行 CreateBindingSet()?

2023-12-25

在N+1视频#34(Progress)中,有一个针对Android版本使用CreateBindingSet()的示例,这并不典型。但解说员也简单提到,在Windows平台上也可以做同样的事情。

然而,尽我所能,我无法将视图的属性绑定到 Windows Phone 上的 ModelView。我总是得到一个空引用异常.

我最接近的是下面的代码,包括 ReSharper 的建议。这是我的 FirstView.xaml.cs:

using Cirrious.MvvmCross.Binding.BindingContext;
using Whatever.ViewModels;

namespace Whatever {

// inheriting from IMvxBindingContextOwner was suggested by ReSharper also

public partial class FirstView : BaseView, IMvxBindingContextOwner {

  public class MyBindableMediaElement
  {
        private string _theMediaSource = "whatever";                                                                                                                     
        public string TheMediaSource
        {
            get
            {
                return _theMediaSource;
            }
            set
            {
                _theMediaSource = value;
            }
        }
   }

  public FirstView()
   {
        InitializeComponent();

        _mediaElement = new MyBindableMediaElement(this.theMediaElement);

        var set = this.CreateBindingSet<FirstView, FirstViewModel>();
        // the corresponding view model has a .SongToPlay property with get/set defined
        set.Bind(_mediaElement).For(v => v.TheMediaSource).To(vm => vm.SongToPlay);
        set.Apply();
   }

    public IMvxBindingContext BindingContext { get; set; }      // this was suggested by ReSharper
}

创建视图后,我会在 MvxBaseFluentBindingDescription.cs 中收到 NullReferenceException。具体位置如下:

    protected static string TargetPropertyName(Expression<Func<TTarget, object>> targetPropertyPath)
    {
        var parser = MvxBindingSingletonCache.Instance.PropertyExpressionParser;        // <----- exception here**
        var targetPropertyName = parser.Parse(targetPropertyPath).Print();
        return targetPropertyName;
    }

我还没有看到在 Windows Phone 模拟器上创建绑定集的工作示例。有人让它发挥作用吗?谢谢。


我可以确认,叙述者说这句话有点太轻率了,而没有真正考虑过他会怎么做......

然而,只要您愿意,只要付出一点努力,您绝对可以让 CreateBindingSet 在 Windows 中工作。

在开始之前,请考虑一些替代方案 - 特别是,我怀疑大多数人会使用 Windows DependencyProperty 绑定或一些带有 PropertyChanged 事件订阅的手工编写的代码隐藏。

如果您确实想将 CreateBindingSet 代码添加到 Windows 项目中,则:

  1. 将 Binding 和 BindingEx 程序集添加到您的 Ui 项目中 - 最简单的方法是使用 nuget 添加 BindingEx 包。
  2. 在您的Setup类中,重写InitializeLastChance并利用这个机会创建一个MvxWindowsBindingBuilder实例并调用DoRegistration在那个建筑商身上。 n=35 西藏绑定视频中介绍了前两个步骤 - 第二步将初始化绑定框架并帮助您克服当前的“NullReferenceException”(有关代码,请参阅BindMe.Store/Setup.cs https://github.com/slodge/NPlus1DaysOfMvvmCross/blob/master/N-35-Tibet/BindMe.Store/Setup.cs)
  3. 在您看来,您需要实现 IMvxBindingContextOwner 接口,并且需要确保创建绑定上下文。你应该能够简单地做到这一点BindingContext = new MvxBindingContext();
  4. 在您看来,您需要确保为绑定上下文提供与 Windows DataContext 相同的 DataContext(视图模型)。对于电话页,最简单的方法可能就是添加BindingContext.DataContext = this.ViewModel;到您手机页面的末尾OnNavigatedTo方法。如果您也打算在其他类中使用 Mvx Binding,则步骤 3 和 4 都可以放入您的 BaseView 中。
  5. 完成此操作后,您应该能够使用 CreateBindingSet 代码 - 尽管请确保所有绑定都在new MvxBindingContext()已经被创造了。

我现在没有 Windows 机器,所以我担心这个答案代码未经测试 - 如果它有效或无效,请再次发布。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何在 Windows Phone 上执行 CreateBindingSet()? 的相关文章

随机推荐

  • 有什么方法可以阻止 Visual Studio 在新函数上添加“抛出新的 NotImplementedException”吗?导致命名空间与Unity冲突

    是的 我知道这通常是很好的做法 但 Unity 中的问题是它会导致添加系统名称空间 这会破坏多个 Unity 类 例如 Random 除非我完全限定它们 这很乏味 有什么办法可以禁止它添加投掷吗 我尝试过寻找它的片段 但一无所获 当输入 D
  • 惰性 CSV 过滤/解析 - 提高性能

    延迟过滤 CSV 文件 我需要过滤数百万条日志记录 这些记录存储为大量 CSV 文件 记录的大小大大超出了我的可用内存 因此我想采用一种懒惰的方法 Java 8 流 API With jdk8我们有与 Apache 配对的 Streams
  • 如何在java中按列打印出来

    这是我打印的地方 我需要它在列中打印 Leaderboard 是一个带有自定义类的数组列表 它包含几个不同的整数 System out println Position Team Games Played Home Wins Home Dr
  • SVN 无限循环 - [文件]“存储库中不存在”

    这已经困扰我一周了 SVN 不断告诉我某个文件 does not exist in repository 美好的 我们就把它删除吧 忘掉它 忽略它 任何 我并不真正关心这个文件 特别是如果它继续在夜间签入失败 最奇怪的部分 恢复 实际上会从
  • 按月和年分组,从另一个表中计数

    我试图让我的查询按月份和年份对行进行分组assignments表 并统计具有特定值的行数leads桌子 它们作为assignments表有一个id lead场 即id中的行的leads table d new将是网站为 newsite co
  • 如何使用 dep 管理的开发供应商包?

    如何在使用时使用包的开发副本 克隆dep和供应商目录 供应商目录包含在主存储库中 例如 我已经 fork 了一个包 并用 github 上我自己的包替换了它 我希望能够编辑代码 而不必这样做git push dep ensure对于包的每次
  • GPU 驱动程序究竟如何解释 GLSL 的“连贯”内存限定符以进行多通道渲染?

    GLSL 规范规定 对于 一致 内存限定符 内存变量的读取和写入与其他着色器调用的读取和写入一致 实际上 我不确定现代 GPU 驱动程序如何解释多个渲染过程 当 GLSL 规范规定 其他着色器调用 时 这是指仅在当前通道期间运行的着色器调用
  • 尝试用C编写阶乘程序

    幸运的是 这个程序可以很好地找到 1 到 12 的阶乘 但在 12 之后为 13 14 20 输出出错 我也尝试找到 40 的阶乘 输出为 0 没找到具体问题所在 include
  • 如何在休眠中延迟加载多对多集合?

    我可以延迟加载一对多和多对一关联 但不能延迟加载多对多关联 我们有一个城市 里面有有地址的商人 商户可以有多个地址 多个商户可以有相同的地址 当我们向商家加载 get 时 Merchant merchant Merchant hib ses
  • O(M+N) 是什么意思?

    这是一个基本问题 但我认为 O M N 与 O max M N 相同 因为当我们趋向无穷大时 较大的项应该占主导地位 另外 这与 O min M N 不同 对吗 我一直看到这个符号 尤其是 在讨论图算法时 例如 您经常会看到 O V E 例
  • 为什么 Java 中的大多数字符串操作都基于正则表达式?

    在 Java 中 有很多方法都与操作字符串有关 最简单的例子是 String split something 方法 现在 许多这些方法的实际定义是它们都采用正则表达式作为输入参数 这使得所有的构建块都非常强大 现在 您将在其中许多方法中看到
  • Redux 与 Context API 和 useReducer 钩子

    过去 6 个月我一直在 React 中工作 但还没有任何 Redux 经验 虽然我使用过 context api 和 useReducer hook 我需要将现有应用程序转换为 React 该应用程序将包含大约 100 120 个组件 我的
  • Bootstrap 3 中的加载状态按钮

    我是 Bootstrap 3 的新手 不知道如何激活加载状态按钮功能 我下面的代码来自文档getboostrap com http getbootstrap com
  • 使用单步旋转时如何实现平滑的动画/如何在旋转开始时获取新的帧大小?

    我正在尝试从两级旋转切换为一级旋转 以避免控制台警告 并且因为苹果建议这样做 因为一级旋转速度更快 但是 我不知道如何尽早获取视图的新大小 考虑到导航栏 状态栏等 以便在动画期间执行 UI 更新 而不是简单地将项目捕捉到它们的位置 就像许多
  • 延迟加载样板模块

    在boilerplatejs中 模块似乎是预先加载的 参考下面的代码 return require baseModule module require sampleModule2 module require customerModule
  • 为节点分配多个属性

    我想为我的节点分配一个属性 目前我正在使用以下数据示例创建一个网络 Attribute Source Target Weight Label 87 5 Heisenberg Pauli 66 3 1 12 5 Beckham Messi 3
  • 如何在C++中从Windows注册表获取计算机制造商和型号?

    我正在编写自己的 C 代码 通过读取和解析注册表项来读取 Windows 计算机上的计算机型号和制造商 HKEY LOCAL MACHINE SYSTEM CurrentControlSet services mssmbios Data S
  • 配置 Docker 守护进程端口以启用 Docker API

    我试图配置Docker 守护进程端口如中提到的a link https docs docker com engine admin configure the docker daemon cat etc docker daemon json
  • python dropbox api错误

    我正在按照教程进行操作here https www dropbox com developers start files python 到目前为止一切顺利 但上传示例给了我错误 代码 from dropbox import client r
  • 如何在 Windows Phone 上执行 CreateBindingSet()?

    在N 1视频 34 Progress 中 有一个针对Android版本使用CreateBindingSet 的示例 这并不典型 但解说员也简单提到 在Windows平台上也可以做同样的事情 然而 尽我所能 我无法将视图的属性绑定到 Wind