ฉันมีแอปพลิเคชัน 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 ชุดจะถูกเรียกอีกครั้งสองครั้งแต่มีค่าว่าง วิธีการ GetMessageAsync ถูกเรียกเพียงครั้งเดียวเท่านั้น ดังนั้นฉันจึงค่อนข้างสับสนว่าการโทรเพิ่มเติมเหล่านั้นมาจากไหน ถ้าฉันแสดงความคิดเห็น RaisePropertyChanged จะไม่มีการโทรซ้ำอีกต่อไป แต่เห็นได้ชัดว่า UI ไม่ได้รับการอัปเดต ฉันตรวจสอบ callstack แล้วและไม่เห็นการโทรซ้ำซ้อน
ในกรณีที่ช่วยให้ทั้งโครงการอยู่บน Github ภายใต้: https://github.com/NPPadrutt/MoneyFox.Windows/tree/fix-crashes
กระบวนการคือเมื่อเพิ่มการชำระเงินและเลือกหมวดหมู่