MVVM a async rubrika: Programování: Jiné
Ako vo ViewModeli pracovat s async a await ? predtym (ked som nepouzival MVVM) som v codebehinde nacital polozky do ItemSource az ked sa downloadli:
public partial class MainWindow : Window { public MainWindow() { InitializeComponent(); LoadUsers(); } private async void LoadUsers() { var userRepository = new UserRepository("http://adresa-servera.com/"); userRepository.DownloadProgress = eventArgs => Dispatcher.Invoke(() => progressBar.Value = eventArgs.ProgressPercentage); usersListBox.ItemsSource = await userRepository.AsyncGetAllUsers(); } }
Teraz si View pri bindingu pyta polozky priamo z ViewModelu a tam nemam kde obsluzit asynchronnu operaciu. Jedine ze by som ju spustil na aplikacnom threade to by potom, ale cela aplikacia "zamrzla" az kym by sa nedokoncila operacia a tak to nechcem.
View by si při bindingu už mělo jen získaná data převzít a zobrazit. Z toho co píšeš to vypadá, že v property vykonáváš nějakou další činnost, což není dobře. Ta činnost by se měla udát na základě nějakého Commandu nebo Eventu, ten potom naplní property a zavolá NotifyPropertyChanged. To celé pak může samozřejmě celé běžet s využitím async await, nebo můžeš využít jiných způsobů - coroutines, ReactiveUI, backgroundworker atd.
Pro zobrazení všech 2 odpovědí se prosím přihlaste:
Nebo se přihlaste jménem a heslem:
Komentáře