【问题标题】:Looking for right way to implement multiple properties dependency for binding in Xamarin View寻找在 Xamarin View 中实现绑定的多个属性依赖项的正确方法
【发布时间】:2019-10-17 10:28:15
【问题描述】:

我是 Xamarin 世界及其数据绑定规则的新手。我有带有可观察的 CurrentOrder 属性的 ViewModel,以及 3 个值依赖于它的属性。所有 4 个属性都在带有绑定的 View 中使用,因此 CurrentOrder 中的每个更改都应该将更改传播到其他 3 个属性,这会影响视图显示其控件和数据的方式。我对我应该如何将CurrentOrder 更改的信号传播到其他 3 个相关属性感到困惑。我想出了实际可行的代码,但对我来说它看起来有点尴尬,并且在独立属性CurrentOrder 中设置了依赖关系,而我更希望它是另一种方式:依赖属性应该更好地知道它们依赖的属性。

请注意,SetProperty 和 OnPropertyChanged 方法位于基本视图模型中,由标准 VS Xamarin.Forms 项目模式生成。

    private int _currentOrder = 1;
    public int CurrentOrder
    {
        get => _currentOrder;
        set => SetProperty(ref _currentOrder, value, onChanged: () =>
            {
                OnPropertyChanged(nameof(CurrentItem));
                OnPropertyChanged(nameof(IsTheLastItem));
                OnPropertyChanged(nameof(IsTheFirstItem));
            });

    }

    public string CurrentItem => Items[CurrentOrder - 1];

    public bool IsTheLastItem => CurrentOrder == Items.Count;

    public bool IsTheFirstItem => CurrentOrder == 1;

非常感谢您对此处最佳实践的任何建议

【问题讨论】:

  • 我们总是像你一样在系列中这样做。这是良好的做法。

标签: xaml xamarin xamarin.forms


【解决方案1】:

对于这样的依赖属性,我会使用 Fody propertychanged

只需添加 nuget,不要忘记添加 FodyWeavers.xml,您的类将如下所示

public class ViewModel : INotifyPropertyChanged
{
    public event PropertyChangedEventHandler PropertyChanged;

    public int CurrentOrder {get; set;}
    public string CurrentItem => Items[CurrentOrder - 1];

    public bool IsTheLastItem => CurrentOrder == Items.Count;

    public bool IsTheFirstItem => CurrentOrder == 1;

}

【讨论】:

  • 它确实有效。谢谢。仅供其他人参考:默认情况下,它会通知所有属性有关所有属性的更改,但是使用属性您可以定义哪个属性取决于哪个,代码保持整洁
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-04-14
  • 2023-04-04
  • 1970-01-01
  • 1970-01-01
  • 2011-12-03
相关资源
最近更新 更多