#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:
Хорошо, глупый я не удалил поле со списком, которое я заменял. У этого была двусторонняя привязка к нему, которая вызвала это.