Ищете правильный способ реализации зависимости нескольких свойств для привязки в Xamarin View - PullRequest
2 голосов
/ 16 октября 2019

Я новичок в мире Xamarin и его правилах привязки данных. У меня есть ViewModel с наблюдаемым свойством CurrentOrder, и 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;

Любые рекомендации по передовым методам здесь очень приветствуются

1 Ответ

2 голосов
/ 17 октября 2019

Я бы использовал Fody, измененный для зависимых свойств, подобных этому.

Просто добавьте 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;

}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...