當我嘗試綁定ViewModel中的ObservableCollection時,出現一個小錯誤。問題是它連接到web api來獲取列表,但由於某種原因,它不夠快。Wpf MVVM - 在視圖顯示之前ViewModel中沒有應用綁定(Async/await)
我認爲它與async/await有關,它不等待列表在加載視圖之前獲取其數據。
代碼:
public ObservableCollection<AvailableRoomModel> AvailableRooms { get; set; }
public ObservableCollection<AvailableRoomModel> List { get; set; }
的AvailableRooms是正確的列表,該列表只是爲了測試。
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綁定到列表與NAME =列出它的工作原理(其速度不夠快),但結合AvailableRooms時忽略了最低的工作。
我真的不想要一個searchCommand在視圖中我可以點擊,只是想在顯示視圖之前填充列表。
任何想法?
由於某種原因,它一直掛起。我已經調試過,並檢查列表是否被填充,並且確實如此。 – Mikkel
爲了避免掛起不是在構造函數中的房間,而是在viewmodel中使用單獨的方法,並從事件處理程序(例如'Window.Loaded')中調用它,您可以在其中使用'async void'作爲事件處理程序,並且可以在其中使用'await ViewModel.LoadAvailableRooms();' – Gabor