Mock Search (рус: Фейковый поиск)
На этой страницу вы узнаете, как создать view model
для поиска альбомов, а потом связать ее с компонентами UI на новом user control
.
На этом шаге вы будете использовать фейковый поиск, что позволит сосредоточиться на view model
.
Reactive View Model
Фреймворк ReactiveUI предоставляет собственную систему data binding (рус: привязки данных)
.
Вы можете добавить ее во view model
через класс ViewModelBase
,
который наследуется от ReactiveObject
.
Эти действия были выполнены при сощлании проекта через solution template (рус: шаблон решений)
.
Для наследования от класса ReactiveObject
, выполните указанные ниже действия:
- Найдите и откройте файл MusicStoreViewModel.cs.
- Добавьте код для наследования от
ViewModelBase
.
namespace Avalonia.MusicStore.ViewModels
{
public class MusicStoreViewModel : ViewModelBase
{
}
}
Данное действие добавило во view model
важный метод RaiseAndSetIfChanged
,
который позволяет указанным свойствам уведомлять view
об изменениях.
Подробнее о принципах паттерна MVVM и уведомлениях, см. здесь.
На текущем этапе вы добавить два свойств для логики поиска:
- Текстовая строка (критерий поиска)
- Логическое значение (индикатор поиска)
- Для добавления указанных ранее свойств, добавьте указанный ниже код:
using ReactiveUI;
namespace Avalonia.MusicStore.ViewModels
{
public class MusicStoreViewModel : ViewModelBase
{
private string? _searchText;
private bool _isBusy;
public string? SearchText
{
get => _searchText;
set => this.RaiseAndSetIfChanged(ref _searchText, value);
}
public bool IsBusy
{
get => _isBusy;
set => this.RaiseAndSetIfChanged(ref _isBusy, value);
}
}
}
Как вы могли заметить, данные свойства имеют обычный публичный getter
, который возвращает значение приватного поля.
Но вот setter
вызывает метод RaiseAndSetIfChanged
- уведомление об изменении.
Data Binding (рус: Привязка данных)
Теперь вы добавите data binding (рус: привязку данных)
для связи view
и view model
.
Текстовое поле будет привязано к SearchText
, а индикатор прогресса к IsBusy
.
Выполните указанные ниже действия:
- Найдите и откройте файл MusicStoreView.axaml.
- Добавьте выражение
binding (рус: привязки)
, как показано ниже:
<UserControl ...>
<!-- ... -->
<DockPanel>
<StackPanel DockPanel.Dock="Top">
<TextBox Text="{Binding SearchText}" Watermark="Search for Albums...." />
<ProgressBar IsIndeterminate="True" IsVisible="{Binding IsBusy}" />
</StackPanel>
<Button Content="Buy Album"
DockPanel.Dock="Bottom"
HorizontalAlignment="Center" />
<ListBox/>
</DockPanel>
<!-- ... -->
</UserControl>