ชุดคุณสมบัติ UWP ถูกเรียกหลายครั้งเมื่อมีการเรียก RaisePropertyChanged

ฉันมีแอปพลิเคชัน 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

กระบวนการคือเมื่อเพิ่มการชำระเงินและเลือกหมวดหมู่


uwp
person NPadrutt    schedule 11.09.2020    source แหล่งที่มา


คำตอบ (1)


โอเค โง่ที่ฉันไม่ได้ลบคอมโบบ็อกซ์ที่ฉันกำลังเปลี่ยนอยู่ อันนั้นมีการผูกมัดสองทางซึ่งทำให้เกิดสิ่งนี้

person NPadrutt    schedule 12.09.2020