Открытие диалогового окна
На этой страницу вы узнаете, как используя 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; }