Saya memiliki aplikasi UWP dengan MvvmLight. Pada halaman pembuatan saya membuka dialog konten untuk memilih kategori dan mengirimkannya melalui messenger MvvmLight ke ViewModel utama.
Berlangganan pesan dilakukan di sini:
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)));
}
Properti kategori adalah:
private CategoryViewModel? categoryViewModel;
public CategoryViewModel? Category
{
get => categoryViewModel;
set
{
if(categoryViewModel == value)
return;
categoryViewModel = value;
RaisePropertyChanged();
}
}
Pesan dikirim ke sini:
MessengerInstance.Send(new CategorySelectedMessage(category.Id));
dan inilah pesannya:
public class CategorySelectedMessage
{
public CategorySelectedMessage(int categoryId)
{
CategoryId = categoryId;
}
public int CategoryId { get; set; }
}
Segera setelah RaisePropertyChanged dipanggil, himpunan dipanggil lagi dua kali tetapi dengan nol. Metode AcceptMessageAsync hanya dipanggil sekali jadi saya agak bingung dari mana panggilan tambahan itu akan datang. Jika saya mengomentari RaisePropertyChanged tidak ada lagi panggilan duplikat, tapi jelas UI tidak diperbarui. Saya juga memeriksa tumpukan panggilan dan tidak dapat melihat panggilan duplikat.
Jika ini membantu seluruh proyek ada di Github di bawah: https://github.com/NPadrutt/MoneyFox.Windows/tree/fix-crashes
Prosesnya adalah ketika menambahkan pembayaran dan memilih kategori.