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

#uwp

#uwp

Вопрос:

У меня есть приложение UWP с MVVMLight. На странице создания я открываю диалоговое окно содержимого, чтобы выбрать категорию и отправить ее через MVVMLight messenger в основную 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, набор вызывается снова дважды, но с null. Метод «ReceiveMessageAsync» вызывается только один раз, поэтому я немного запутался, откуда поступают эти дополнительные вызовы. Если я закомментирую RaisePropertyChanged, дублированных вызовов больше не будет, но, очевидно, пользовательский интерфейс не обновляется. Я также проверил callstack и не вижу дублированных вызовов.

На случай, если это поможет, весь проект находится на Github в разделе:https://github.com/NPadrutt/MoneyFox .Windows / дерево / исправление-сбой

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

Ответ №1:

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