Набор свойств UWP вызывается несколько раз при вызове RaisePropertyChanged.

У меня есть приложение UWP с MvvmLight. На странице создания я открываю диалог содержимого, чтобы выбрать категорию и отправить ее через мессенджер MvvmLight на главную ViewModel.

Подписка на сообщение делается здесь:

    public void Subscribe()
    {
        MessengerInstance.Register<CategorySelectedMessage>(this, async message => await ReceiveMessageAsync(message));
    }

    public void Unsubscribe()
    {
        MessengerInstance.Unregister<CategorySelectedMessage>(this, async message => await ReceiveMessageAsync(message));
    }

    private async Task ReceiveMessageAsync(CategorySelectedMessage message)
    {
        if(SelectedPayment == null || message == null)
            return;
        SelectedPayment.Category = mapper.Map<CategoryViewModel>(await mediator.Send(new GetCategoryByIdQuery(message.CategoryId)));
    }

Свойство категории:

private CategoryViewModel? categoryViewModel;
public CategoryViewModel? Category
{
    get => categoryViewModel;
    set
    {
        if(categoryViewModel == value)
            return;
        categoryViewModel = value;
        RaisePropertyChanged();
    }
}

Сообщение отправлено сюда:

MessengerInstance.Send(new CategorySelectedMessage(category.Id));

и это сообщение:

public class CategorySelectedMessage
{
    public CategorySelectedMessage(int categoryId)
    {
        CategoryId = categoryId;
    }

    public int CategoryId { get; set; }
}

Как только вызывается RaisePropertyChanged, набор вызывается снова дважды, но с нулевым значением. Метод ReceiveMessageAsync вызывается только один раз, поэтому я немного запутался, откуда поступают эти дополнительные вызовы. Если я закомментирую RaisePropertyChanged, дубликатов вызовов больше не будет, но, очевидно, пользовательский интерфейс не обновится. Я также проверил стек вызовов и не вижу повторяющихся вызовов.

Если это поможет, весь проект находится на Github по адресу: https://github.com/NPadrutt/MoneyFox.Windows/tree/fix-crashes

Процесс заключается в добавлении платежа и выборе категории.


uwp
person NPadrutt    schedule 11.09.2020    source источник


Ответы (1)


Хорошо, глупый, я не удалил поле со списком, которое заменял. У этого было двустороннее связывание, которое вызвало это.

person NPadrutt    schedule 12.09.2020