【问题标题】:mvvmcross binding UILabelmvvmcross 绑定 UILabel
【发布时间】:2014-10-10 07:07:06
【问题描述】:

我正在尝试将 ULabel 绑定到核心中的命令,但不知道为什么它不适合我。我读到 UILabel 可以绑定到默认的 Text 属性,所以我有以下简单的测试器来演示:

在 Touch 代码中,我有以下 ViewDidLoad:

        var tipLabel = new UILabel(new RectangleF(10, 20, 300, 40));
        Add(tipLabel);

        var loginBtn = new UIButton(UIButtonType.RoundedRect) { Frame = new RectangleF(10, 100, 100, 40) };
        loginBtn.SetTitle("Set Text", UIControlState.Normal);

        var tap = new UITapGestureRecognizer(() =>
        {
            tipLabel.Text = DateTime.Now.ToShortTimeString();
        });
        loginBtn.AddGestureRecognizer(tap);
        Add(loginBtn);


        var set = this.CreateBindingSet<FirstView, FirstViewModel>();
        set.Bind(tipLabel).For(p=>p.Text).To(vm=>vm.TestCommand);
        set.Apply();

在核心中:

     private MvxCommand _testCommand;

    public ICommand TestCommand
    {
        get { return this._testCommand ?? (this._testCommand = new MvxCommand(this.Test)); }
    }


    public void Test()
    {
    }

我错过了什么?

谢谢 标记

【问题讨论】:

  • Command 应该用于 Click 等操作。为什么要将文本字段绑定到 Command?您应该将其绑定到字符串属性

标签: c# binding xamarin mvvmcross


【解决方案1】:

您正在有效地将 Text 属性绑定到命令。这行不通。我会使用 UIButton 并调整其属性,使其看起来像一个标签,然后绑定到其点击事件以更改按钮标签。

【讨论】:

  • 是的,谢谢,按钮可以工作,我只是认为任何控件都可以绑定到命令。说它不是 UILabel 而是 Grid 我想将绑定到行选择添加到命令。这是否需要某种自定义绑定,你知道吗?
  • 为了绑定命令,它必须是您可以实际将命令绑定到...的东西,例如 Click 事件或其他类似事件。您可以查看 iOS 文档并了解该控件具有哪些属性以及哪些可能有效。因此,在您的情况下,您无法将命令绑定到需要字符串的内容。在您的行示例中,您将绑定到网格或表格的 onClick 事件
  • 有一个 Tap 行为 - 可用于绑定命令 - 例如set.Bind(tipLabel).For("Tap").To(vm=&gt;vm.TestCommand);
  • 谢谢,我想我应该以不同的方式开始我的问题。我正在使用基础架构网格,并且在某些时候我收到一个事件,表明该行被选中。我想触发核心对象移动到下一个屏幕的命令。由于我不知道将命令绑定到什么,我正在考虑将其绑定到 UILabel 中的某个文本字段,我会在行选择上更新这将触发该命令。在我的情况下,触发没有绑定到任何元素的命令的方法是什么。再次感谢您
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2017-07-18
  • 2013-10-17
  • 1970-01-01
  • 2013-06-24
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多