В программе есть постраничный вывод данных из БД в DataGrid
.
Данные подгружаются асинхронно порциями при смене номера текущей страницы.
Сейчас сделано так, что в сеттере CurrentPage
вызывается LoadProducts
, но т.к. нельзя написать await
, то метод выполняется синхронно.
Какой такое должно реализовываться?
public int CurrentPage
{
get { return _currentPage; }
set
{
_currentPage = value;
LoadProducts();
OnPropertyChanged();
}
}
async void LoadProducts()
{
// Получение данных из БД
}
Никак.
Свойство является по существу полем с небольшой довеской. При использовании поля никто не предполагает, что оно будет медленным, асинхронным, или хуже того сможет зависнуть или бросить исключение (если только не присваивать неправильное значение).
Используйте обыкновенную async
-функцию:
public int CurrentPage
{
get { return _currentPage; }
}
public async Task SwitchToPage(int value)
{
// Получение данных из БД
_currentPage = value;
OnPropertyChanged(nameof(CurrentPage));
}
Если речь идёт об интерфейсе, тогда, возможно, имеет смысл такое изменение:
public int CurrentPage
{
get { return _currentPage; }
set
{
if (_currentPage == value) return;
_currentPage = value;
SwitchToPage(value); // игнорируем возвращаемое значение
OnPropertyChanged(); // загрузка произойдёт в фоне
}
}
async Task SwitchToPage(int value)
{
try
{
IsCurrentPageEditable = false;
// Получение данных из БД
}
catch (тут исключения)
{
// тут обработка
}
finally
{
IsCurrentPageEditable = true;
}
}
bool _isCurrentPageEditable = true;
public bool IsCurrentPageEditable
{
get { return _isCurrentPageEditable; }
private set { _isCurrentPageEditable = value; OnPropertyChanged(); }
}
и в UI
<TextBox Text="{Binding CurrentPage}" IsEnabled="{Binding IsCurrentPageEditable}"/>
<TextBlock Text="загрузка..." Visibility="{Binding IsCurrentPageEditable,
Converter={StaticResource BooleanToVisibilityConverter}}"/>
Виртуальный выделенный сервер (VDS) становится отличным выбором
В документации сказано, что метод EditorWindowShow открывает окно EditorWindow
Я пишу программу, способную решать уравнения / системы с помощью этой библиотеки
Есть несколько моделей и для них BusinessContext в котором описаны CRUD операцииПо сути они одни, только меняются таблицы
Надо предоставить игроку возможность создавать игровое поле посредством рисования(пример)Ввод осуществляется исходя из координат курсора(в...