Открытие диалогового окна
На этой страницу вы узнаете, как используя ReactiveUI можно управлять другим окном в приложении. Новое окно будет иметь возможность поиска, а также кнопку для добавления одного из найденных альбомов в список основного окна. Новое окно будет открывать как диалоговое, из-за чего, во время его отображения, основное окно будет блокироваться.
Добавление нового диалогового окна
В самом файле window view
нет ничего, что может сделать его диалоговым.
Это зависит от способа управления окном в приложении, и для этих целей вы будете использовать ReactiveUI.
Для создания нового окна, выполните следующие действия:
- Остановите приложение, если оно запущено.
- В обозревателе решений, нажмите ПКМ по папке /Views и выберите Add.
- Нажмите Avalonia Window.
- Когда будет предложено ввести название, укажите 'MusicStoreWindow'
- Нажмите
Enter
.
Стилизация диалогового окна
Для стилизации нового диалогового о кна, также как и в основном окне, выполните следующие действия:
- Найдите и откройте файл MusicStoreWindow.axaml.
- Для добавления акрилового размытия фона и строки заголовка, измените код, как показано ниже:
<Window xmlns="https://github.com/avaloniaui"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
mc:Ignorable="d" d:DesignWidth="800" d:DesignHeight="450"
x:Class="Avalonia.MusicStore.Views.MusicStoreWindow"
Title="MusicStoreWindow"
TransparencyLevelHint="AcrylicBlur"
ExtendClientAreaToDecorationsHint="True">
<Panel>
<ExperimentalAcrylicBorder IsHitTestVisible="False">
<ExperimentalAcrylicBorder.Material>
<ExperimentalAcrylicMaterial
BackgroundSource="Digger"
TintColor="Black"
TintOpacity="1"
MaterialOpacity="0.65" />
</ExperimentalAcrylicBorder.Material>
</ExperimentalAcrylicBorder>
<Panel Margin="40">
</Panel>
</Panel>
</Window>
Ввод и вывод диалогового окна
Работа диалогового окна будет обрабатываться его собственной view model
.
Она будет создана и связана с ним в момент, когда диалоговое окно должно будет отобразиться.
Аналогичным образом, результат взаимодействия пользователя с диалоговым окном, должен быть передан обратно для обработки в основном окне.
На этом этапе вы создадите два пустых класса view model
, которые будут выступать в качестве заполнителей для dialog view model
и объекта dialog return
(выбранный альбом).
Выполните следующие действия:
- В обозревателе решений нажмите ПКМ по папке /ViewModels и выберите Add.
- Нажмите Class.
- Укажите имя класса 'MusicStoreViewModel' и выберите Add.
- Повторно нажмите ПКМ по папке /ViewModels и выберите Add.
- Нажмите Class.
- Укажите имя класса 'AlbumViewModel' и выберите Add.
Отображение диалогового окна
Теперь у нас есть новое окно, которое можно будет использовать как диалоговое.
А также классы view model
для взаимодействия с ним. Для создания самого взаимодействия, нужно выполнить 2 условия:
View model
основного окна запускает взаимодействие.View
основного окна знает "как" начать взаимодействие.
Первым делом изменим код view model
основного окна так,
чтобы он запускал взаимодействие для отображения диалогового окна.
Выполните следующие действия:
- Найдите и откройте файл MainWindowViewModel.cs.
- Добавьте объявление взаимодействия с новым диалоговым окном, как показано ниже:
public Interaction<MusicStoreViewModel, AlbumViewModel?> ShowDialog { get; }