Wpf MVVM - 在View显示之前未在ViewModel中应用绑定(Async / await)

时间:2016-04-24 09:43:36

标签: c# wpf asynchronous mvvm

当我尝试在ViewModel中绑定ObservableCollection时,我遇到了一个小错误。问题是它连接到web api以获取列表,但由于某种原因,它不够快。

我认为它与async / await有关,它不会在加载视图之前等待列表获取其数据。

代码:

public ObservableCollection<AvailableRoomModel> AvailableRooms { get; set; }
public ObservableCollection<AvailableRoomModel> List { get; set; }

AvailableRooms是正确的列表,List仅用于测试。

public RoomsViewModel(IGetAvailableRoomsService getAvailableRoomsService)
{
    //Injection
    _getAvailableRoomsService = getAvailableRoomsService;

    //Initialize
    AvailableRooms = new ObservableCollection<AvailableRoomModel>();

    //Get all rooms
    GetAvailableRooms();

    List = new ObservableCollection<AvailableRoomModel>();

    List.Add(new AvailableRoomModel { Id = 1, RoomNumber = "101", Occupied = true });
    List.Add(new AvailableRoomModel { Id = 2, RoomNumber = "102", Occupied = true });
    List.Add(new AvailableRoomModel { Id = 3, RoomNumber = "103", Occupied = true });
}


public async void GetAvailableRooms()
{
    try
    {
        AvailableRooms = await _getAvailableRoomsService.getRooms();
    }
    catch (Exception e)
    {
        //TODO   
    }

}

已经测试过,如果我将ItemsControl绑定到名称为List的列表,它可以正常工作(它足够快)但绑定到AvailableRooms时它不起作用。

我真的不想在我可以点击的视图中使用searchCommand,只是想在显示视图之前填充列表。

有什么想法吗?

1 个答案:

答案 0 :(得分:0)

问题是curl -H "Foo: Bar" http://localhost/cgi-bin/printenv.cgi 。如果您想等待方法,则其返回类型必须为Anonymous UUID: 1B68061F-68FC-BED2-559B-C8457A01380E Sun Apr 24 16:03:12 2016 *** Panic Report *** panic(cpu 6 caller 0xffffff7f92b72bd5): "GPU Panic: [<None>] 3 0 a0 d9 9 8 0 3 : NVRM[0/1:0:0]: Read Error 0x00000100: CFG 0xffffffff 0xffffffff 0xffffffff, BAR0 0x103e00000 0xffffff92013c9000 0x0e7150a2, D0, P3/4\n"@/Library/Caches/com.apple.xbs/Sources/AppleGraphicsControl/AppleGraphicsControl-3.12.6/src/AppleMuxControl/kext/GPUPanic.cpp:127 Backtrace (CPU 6), Frame : Return Address 0xffffff91fd61ae30 : 0xffffff800fadab12 0xffffff91fd61aeb0 : 0xffffff7f92b72bd5 0xffffff91fd61af90 : 0xffffff7f908241e0 0xffffff91fd61b050 : 0xffffff7f908f1ef4 0xffffff91fd61b090 : 0xffffff7f908f1f5f 0xffffff91fd61b110 : 0xffffff7f90b297a8 0xffffff91fd61b1b0 : 0xffffff7f90b413d2 0xffffff91fd61b1f0 : 0xffffff7f9096943a 0xffffff91fd61b220 : 0xffffff7f909693c5 0xffffff91fd61b250 : 0xffffff7f90a770c9 0xffffff91fd61b280 : 0xffffff7f90a78ea4 0xffffff91fd61b310 : 0xffffff7f90a79306 0xffffff91fd61b370 : 0xffffff7f90839636 0xffffff91fd61b3c0 : 0xffffff7f90a7d828 0xffffff91fd61b530 : 0xffffff7f90a7dc3a 0xffffff91fd61b5c0 : 0xffffff7f90928186 0xffffff91fd61b720 : 0xffffff7f90926ddf 0xffffff91fd61b760 : 0xffffff7f90936ffa 0xffffff91fd61b7c0 : 0xffffff7f90931337 0xffffff91fd61b7e0 : 0xffffff7f908eed6e 0xffffff91fd61b820 : 0xffffff7f908ede6f 0xffffff91fd61b890 : 0xffffff7f90827441 0xffffff91fd61b8b0 : 0xffffff7f90827ddb 0xffffff91fd61baa0 : 0xffffff7f9082815a 0xffffff91fd61bb40 : 0xffffff7f907d45c0 0xffffff91fd61bbc0 : 0xffffff7f907d3df2 0xffffff91fd61bc20 : 0xffffff7f907d574e 0xffffff91fd61bc60 : 0xffffff7f907864f5 0xffffff91fd61bcf0 : 0xffffff7f9077e10b 0xffffff91fd61bd20 : 0xffffff80100946b1 0xffffff91fd61bd70 : 0xffffff80100de2f9 0xffffff91fd61bde0 : 0xffffff800fb977a1 0xffffff91fd61be30 : 0xffffff800fadf283 0xffffff91fd61be60 : 0xffffff800fac28b8 0xffffff91fd61bea0 : 0xffffff800fad2665 0xffffff91fd61bf10 : 0xffffff800fbb8bda 0xffffff91fd61bfb0 : 0xffffff800fbeca96 Kernel Extensions in backtrace: com.apple.iokit.IOGraphicsFamily(2.4.1)[172C2960-EDF5-382D-80A5-C13E97D74880]@0xffffff7f90774000->0xffffff7f907aefff dependency: com.apple.iokit.IOPCIFamily(2.9)[4FE41F9B-2849-322A-BBF8-A94816C003D6]@0xffffff7f9032c000 com.apple.driver.AppleMuxControl(3.12.6)[44D361A1-4938-3AA5-9F73-9C909B66214B]@0xffffff7f92b64000->0xffffff7f92b77fff dependency: com.apple.driver.AppleGraphicsControl(3.12.6)[1654475C-9A4B-386C-AFA8-0A530194A2F9]@0xffffff7f92b5c000 dependency: com.apple.iokit.IOACPIFamily(1.4)[5D7574C3-8E90-3873-BAEB-D979FC215A7D]@0xffffff7f90f7f000 dependency: com.apple.iokit.IOPCIFamily(2.9)[4FE41F9B-2849-322A-BBF8-A94816C003D6]@0xffffff7f9032c000 dependency: com.apple.iokit.IOGraphicsFamily(2.4.1)[172C2960-EDF5-382D-80A5-C13E97D74880]@0xffffff7f90774000 dependency: com.apple.driver.AppleBacklightExpert(1.1.0)[C49819CE-729A-36B2-9AC1-744A43DC236F]@0xffffff7f92b5f000 com.apple.nvidia.driver.NVDAResman(10.1)[8649777A-3EED-3F2F-8B12-FBC5517F62E6]@0xffffff7f907d2000->0xffffff7f90a4bfff dependency: com.apple.iokit.IOPCIFamily(2.9)[4FE41F9B-2849-322A-BBF8-A94816C003D6]@0xffffff7f9032c000 dependency: com.apple.iokit.IONDRVSupport(2.4.1)[1114B99F-E439-329E-876D-1FEC4CF45DF6]@0xffffff7f907bb000 dependency: com.apple.iokit.IOGraphicsFamily(2.4.1)[172C2960-EDF5-382D-80A5-C13E97D74880]@0xffffff7f90774000 dependency: com.apple.AppleGraphicsDeviceControl(3.12.6)[F211EB28-182A-34BB-A610-87667618F925]@0xffffff7f907cb000 com.apple.nvidia.driver.NVDAGK100Hal(10.1)[EB8A5980-AB59-368A-8244-60A00C7A933C]@0xffffff7f90a57000->0xffffff7f90c05fff dependency: com.apple.nvidia.driver.NVDAResman(10.1.0)[8649777A-3EED-3F2F-8B12-FBC5517F62E6]@0xffffff7f907d2000 dependency: com.apple.iokit.IOPCIFamily(2.9)[4FE41F9B-2849-322A-BBF8-A94816C003D6]@0xffffff7f9032c000 BSD process name corresponding to current thread: WindowServer Mac OS version: 15E65 Kernel version: Darwin Kernel Version 15.4.0: Fri Feb 26 22:08:05 PST 2016; root:xnu-3248.40.184~3/RELEASE_X86_64 Kernel UUID: 4E7B4496-0B81-34E9-97AF-F316103B0839 Kernel slide: 0x000000000f800000 Kernel text base: 0xffffff800fa00000 __HIB text base: 0xffffff800f900000 System model name: MacBookPro10,1 (Mac-C3EC7CD22292981F) System uptime in nanoseconds: 8583589115 last loaded kext at 7720294530: com.apple.driver.AGPM 110.21.18 (addr 0xffffff7f92b3c000, size 122880) loaded kexts: net.telestream.driver.TelestreamAudio 1.0.5 com.logmein.driver.LogMeInSoundDriver 4.1.63f33 com.apple.driver.AGPM 110.21.18 com.apple.driver.ApplePlatformEnabler 2.6.0d0 com.apple.driver.X86PlatformShim 1.0.0 com.apple.driver.AppleMikeyHIDDriver 124 com.apple.driver.AppleOSXWatchdog 1 com.apple.driver.AppleMikeyDriver 274.7 com.apple.driver.AudioAUUC 1.70 com.apple.driver.AppleHDAHardwareConfigDriver 274.7 com.apple.driver.pmtelemetry 1 com.apple.iokit.IOUserEthernet 1.0.1 com.apple.driver.AppleHDA 274.7 com.apple.iokit.IOBluetoothSerialManager 4.4.4f4 com.apple.driver.AppleUpstreamUserClient 3.6.1 com.apple.Dont_Steal_Mac_OS_X 7.0.0 com.apple.GeForce 10.1.0 com.apple.driver.AppleIntelHD4000Graphics 10.1.4 com.apple.driver.AppleSMCLMU 208 com.apple.driver.ACPI_SMC_PlatformPlugin 1.0.0 com.apple.driver.AppleHV 1 com.apple.driver.AppleFIVRDriver 4.1.0 com.apple.driver.AppleBacklight 170.8.9 com.apple.iokit.BroadcomBluetoothHostControllerUSBTransport 4.4.4f4 com.apple.driver.AppleSMCPDRC 1.0.0 com.apple.driver.AppleLPC 3.1 com.apple.driver.AppleThunderboltIP 3.0.8 com.apple.driver.AppleMuxControl 3.12.6 com.apple.driver.AppleIntelSlowAdaptiveClocking 4.0.0 com.apple.driver.AppleMCCSControl 1.2.13 com.apple.driver.AppleIntelFramebufferCapri 10.1.4 com.apple.nvidia.NVDAStartup 10.1.0 com.apple.driver.AppleUSBTCButtons 245.4 com.apple.iokit.IOBluetoothUSBDFU 4.4.4f4 com.apple.driver.AppleUSBTCKeyEventDriver 245.4 com.apple.driver.AppleUSBTCKeyboard 245.4 com.apple.driver.CoreStorageFsck 517.20.1 com.apple.driver.AppleFileSystemDriver 3.0.1 com.apple.AppleFSCompression.AppleFSCompressionTypeDataless 1.0.0d1 com.apple.AppleFSCompression.AppleFSCompressionTypeZlib 1.0.0 com.apple.BootCache 38 com.apple.driver.AirPort.Brcm4331 800.20.24 com.apple.driver.AppleSDXC 1.7.0 com.apple.iokit.AppleBCM5701Ethernet 10.2.0 com.apple.iokit.IOAHCIBlockStorage 2.8.5 com.apple.driver.AirPort.Brcm4360 1040.1.1a6 com.apple.driver.usb.AppleUSBEHCIPCI 1.0.1 com.apple.driver.AppleAHCIPort 3.1.8 com.apple.driver.AppleSmartBatteryManager 161.0.0 com.apple.driver.AppleACPIButtons 4.0 com.apple.driver.AppleRTC 2.0 com.apple.driver.AppleHPET 1.8 com.apple.driver.AppleSMBIOS 2.1 com.apple.driver.AppleACPIEC 4.0 com.apple.driver.AppleAPIC 1.7 com.apple.driver.AppleIntelCPUPowerManagementClient 218.0.0 com.apple.nke.applicationfirewall 163 com.apple.security.quarantine 3 com.apple.security.TMSafetyNet 8 com.apple.driver.AppleIntelCPUPowerManagement 218.0.0 com.apple.driver.DspFuncLib 274.7 com.apple.kext.OSvKernDSPLib 525 com.apple.iokit.IOSerialFamily 11 com.apple.driver.CoreCaptureResponder 1 com.apple.nvidia.driver.NVDAGK100Hal 10.1.0 com.apple.nvidia.driver.NVDAResman 10.1.0 com.apple.iokit.IOSurface 108.2.1 com.apple.driver.IOPlatformPluginLegacy 1.0.0 com.apple.iokit.IOBluetoothHostControllerUSBTransport 4.4.4f4 com.apple.iokit.IOBluetoothFamily 4.4.4f4 com.apple.driver.AppleHDAController 274.7 com.apple.iokit.IOHDAFamily 274.7 com.apple.iokit.IOAudioFamily 204.3 com.apple.vecLib.kext 1.2.0 com.apple.driver.AppleSMBusPCI 1.0.14d1 com.apple.driver.AppleThunderboltEDMSink 4.1.1 com.apple.driver.AppleThunderboltDPOutAdapter 4.1.3 com.apple.driver.AppleBacklightExpert 1.1.0 com.apple.driver.AppleGraphicsControl 3.12.6 com.apple.driver.X86PlatformPlugin 1.0.0 com.apple.driver.IOPlatformPluginFamily 6.0.0d7 com.apple.iokit.IOSlowAdaptiveClockingFamily 1.0.0 com.apple.iokit.IONDRVSupport 2.4.1 com.apple.driver.AppleSMC 3.1.9 com.apple.driver.AppleSMBusController 1.0.14d1 com.apple.iokit.IOAcceleratorFamily2 205.3 com.apple.AppleGraphicsDeviceControl 3.12.6 com.apple.iokit.IOGraphicsFamily 2.4.1 com.apple.iokit.IOSCSIArchitectureModelFamily 3.7.7 com.apple.driver.usb.IOUSBHostHIDDevice 1.0.1 com.apple.driver.AppleUSBMultitouch 250.5 com.apple.iokit.IOUSBHIDDriver 900.4.1 com.apple.driver.usb.cdc 5.0.0 com.apple.driver.usb.networking 5.0.0 com.apple.driver.usb.AppleUSBHostCompositeDevice 1.0.1 com.apple.driver.usb.AppleUSBHub 1.0.1 com.apple.driver.CoreStorage 517.20.1 com.apple.driver.AppleThunderboltDPInAdapter 4.1.3 com.apple.driver.AppleThunderboltDPAdapterFamily 4.1.3 com.apple.driver.AppleThunderboltPCIDownAdapter 2.0.2 com.apple.driver.AppleXsanScheme 3 com.apple.driver.AppleThunderboltNHI 4.0.4 com.apple.iokit.IOThunderboltFamily 6.0.2 com.apple.iokit.IOEthernetAVBController 1.0.3b3 com.apple.iokit.IO80211Family 1110.26 com.apple.driver.mDNSOffloadUserClient 1.0.1b8 com.apple.iokit.IONetworkingFamily 3.2 com.apple.driver.corecapture 1.0.4 com.apple.driver.AppleUSBMergeNub 900.4.1 com.apple.driver.usb.AppleUSBEHCI 1.0.1 com.apple.iokit.IOAHCIFamily 2.8.1 com.apple.driver.usb.AppleUSBXHCIPCI 1.0.1 com.apple.driver.usb.AppleUSBXHCI 1.0.1 com.apple.iokit.IOUSBFamily 900.4.1 com.apple.iokit.IOUSBHostFamily 1.0.1 com.apple.driver.AppleUSBHostMergeProperties 1.0.1 com.apple.driver.AppleEFINVRAM 2.0 com.apple.driver.AppleEFIRuntime 2.0 com.apple.iokit.IOHIDFamily 2.0.0 com.apple.iokit.IOSMBusFamily 1.1 com.apple.security.sandbox 300.0 com.apple.kext.AppleMatch 1.0.0d1 com.apple.driver.AppleKeyStore 2 com.apple.driver.AppleMobileFileIntegrity 1.0.5 com.apple.driver.AppleCredentialManager 1.0 com.apple.driver.DiskImages 417.2 com.apple.iokit.IOStorageFamily 2.1 com.apple.iokit.IOReportFamily 31 com.apple.driver.AppleFDEKeyStore 28.30 com.apple.driver.AppleACPIPlatform 4.0 com.apple.iokit.IOPCIFamily 2.9 com.apple.iokit.IOACPIFamily 1.4 com.apple.kec.pthread 1 com.apple.kec.corecrypto 1.0 com.apple.kec.Libm 1 Model: MacBookPro10,1, BootROM MBP101.00EE.B0A, 4 processors, Intel Core i7, 2.7 GHz, 16 GB, SMC 2.3f36 Graphics: Intel HD Graphics 4000, Intel HD Graphics 4000, Built-In Graphics: NVIDIA GeForce GT 650M, NVIDIA GeForce GT 650M, PCIe, 1024 MB Memory Module: BANK 0/DIMM0, 8 GB, DDR3, 1600 MHz, 0x80AD, 0x484D5434314753364D465238432D50422020 Memory Module: BANK 1/DIMM0, 8 GB, DDR3, 1600 MHz, 0x80AD, 0x484D5434314753364D465238432D50422020 AirPort: spairport_wireless_card_type_airport_extreme (0x14E4, 0xEF), Broadcom BCM43xx 1.0 (7.21.95.175.1a6) Bluetooth: Version 4.4.4f4 17685, 3 services, 27 devices, 1 incoming serial ports Network Service: AirPort, AirPort, en0 Serial ATA Device: APPLE SSD SD512E, 500.28 GB USB Device: USB 2.0 Bus USB Device: Hub USB Device: FaceTime HD Camera (Built-in) USB Device: USB 2.0 Bus USB Device: Hub USB Device: Hub USB Device: Apple Internal Keyboard / Trackpad USB Device: BRCM20702 Hub USB Device: Bluetooth USB Host Controller USB Device: USB 3.0 Bus Thunderbolt Bus: MacBook Pro, Apple Inc., 23.4 async void

Task

在ctor中你不能等待这个方法,所以你可以这样简单地调用这个方法:

Task<T>

更新:

您还应该在viewmodel中实现public async Task<IEnumerable<AvailableRoomModel>> GetAvailableRooms() { try { return await _getAvailableRoomsService.getRooms(); } catch (Exception e) { //TODO } } 接口,并且必须使用完整属性才能引发public RoomsViewModel(IGetAvailableRoomsService getAvailableRoomsService) { //Injection _getAvailableRoomsService = getAvailableRoomsService; //Get all rooms AvailableRooms = new ObservableCollection<AvailableRoomModel>( GetAvailableRooms().GetAwaiter().GetResult() ); // ... } 事件。 System.ComponentModel.INotifyPropertyChanged本身实现了这个接口,但设置属性不会引发此事件,除非我们引发它。

PropertyChanged