Xamarin形式:将2个属性绑定到另一个属性

时间:2018-11-22 15:08:22

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

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

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

我想在视图之间(使用转换器)使用一些绑定来解决此问题。我设法通过一个转换器将“上一个”按钮的可见性绑定到当前索引,该转换器检查该索引是否大于0,但是我在“下一个”按钮上苦苦挣扎,因为当当前索引或列表中项目的数量更改。

我已经尝试了很多带有converterparameters的东西,但是无法绑定它们。我还尝试了一个转换器具有绑定的选项,但它甚至无法生成。

This是我正在使用的Horizo​​ntalListView,由于现在我对此不太了解,因此现在切换到其他选项为时已晚。

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

编辑:

Example Control

这是我要构建的控件。

1 个答案:

答案 0 :(得分: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));(请记住在最后取消订阅该事件)

HIH