【问题标题】:Xamarin Forms: Binding 2 properties to another oneXamarin Forms:将 2 个属性绑定到另一个
【发布时间】:2018-11-22 15:08:22
【问题描述】:

我有一个 Horizo​​ntalListView(来自 SharpNado),我有一些按钮可以在不同的项目之间导航。我希望这些按钮仅在某些条件下可见(它们可以同时可见):

如果列表视图的当前索引大于 0,“上一个”按钮应该是可见的。如果列表视图的当前索引低于最高索引(计数 - 1),我希望“下一步”按钮可见。

我想在视图之间使用一些绑定(带有转换器)来解决这个问题。我已经设法将“上一个”按钮的可见性与当前索引绑定到一个转换器,该转换器检查索引是否大于 0,但是我在使用“下一个”按钮时遇到了很多困难,因为它需要在当前索引或列表中的项目数量发生变化。

我用转换器参数尝试了很多东西,但我无法通过它们进行绑定。我还尝试了转换器具有绑定的选项,但它甚至无法构建。

This 是我正在使用的 Horizo​​ntalListView,此时切换到替代方案为时已晚,因为我对此太过分了。

在这一点上,我真的不确定该怎么做,我希望这里有人可以帮助我。提前致谢。

编辑:

这是我正在尝试构建的控件。

【问题讨论】:

  • 请分享您想要实现的视图的代码和图像。听起来像轮播视图中的 Next Previous 按钮?
  • @NirmalSubedi,我发布了一张我希望完成的图片,它确实是一种旋转木马。我不确定要发布什么代码。

标签: c# xamarin data-binding xamarin.forms


【解决方案1】:

在你的 ViewModel 添加一个 getter 属性:

public bool IsLowerThanTheHighestIndex => this.MyIndex < this.MyList.Count - 1;

然后将按钮可见性绑定到该属性。

然后在需要的地方提出更改:

private int _myIndex;
public int MyIndex
{
    get
    {
        return this._myIndex;
    }
    set
    {
        this._myIndex = value;
        OnPropertyChanged(nameof(MyIndex));
        OnPropertyChanged(nameof(IsLowerThanTheHighestIndex));
    }
}

在您修改MyList 的任何地方也会引发更改,例如:

this.MyList.Add(...);
OnPropertyChanged(nameof(IsLowerThanTheHighestIndex));

如果您使用的是ObservableCollection<T>,您可以订阅CollectionChanged 事件并在事件回调中调用OnPropertyChanged(nameof(IsLowerThanTheHighestIndex));(记得在最后取消订阅该事件)

嗨

【讨论】:

  • 我有这样一个可行的解决方案,但我很好奇是否有办法做到这一点,而无需在我的 ViewModel 中添加额外的代码
  • 另一种方法是在每个平台上制作一个自定义控件(或使用某种自定义轮播)来处理按钮何时可用的逻辑,您只需绑定按钮的命令
猜你喜欢
  • 2018-09-09
  • 1970-01-01
  • 2010-11-14
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-12-14
  • 2016-12-30
  • 1970-01-01
相关资源
最近更新 更多