Для реализации данного сценария в Avalonia с использованием Community Toolkit можно использовать следующий подход.
1. Добавьте в XAML файл представление "HomePageView" и кнопку "Press Me!":
```xml
<Design.DataContext>
<vm:MainViewModel/>
</Design.DataContext>
<Button Content="Press Me!" Command="{Binding ChangePageCommand}"/>
```
2. Создайте команду `ChangePageCommand` в вашей модели представления `MainViewModel`:
```csharp
public class MainViewModel : ViewModelBase
{
public ReactiveCommand<Unit, Unit> ChangePageCommand { get; }
public MainViewModel()
{
ChangePageCommand = ReactiveCommand.Create(() =>
{
IoC.Get<IWindowManager>().ShowWindow(new HomePageView());
});
}
}
```
3. Создайте класс `IoC` для регистрации сервисов и представлений:
```csharp
public static class IoC
{
private static readonly Container container;
static IoC()
{
container = new Container();
RegisterServices();
RegisterViews();
}
public static void Register<TInterface, TImplementation>()
{
container.Register<TInterface, TImplementation>();
}
public static TInterface Get<TInterface>()
{
return container.GetInstance<TInterface>();
}
private static void RegisterServices()
{
container.Register<IWindowManager>(() => new WindowManager());
}
private static void RegisterViews()
{
container.Register<HomePageView>();
}
}
```
4. В вашем коде регистрируйте сервисы и представления:
```csharp
IoC.Register<MainWindow>();
IoC.Register<MainViewModel>();
```
5. В методе `BuildAvaloniaApp` основного класса `App.xaml.cs` создайте экземпляр представления `MainWindow` и показывайте его:
```csharp
public override void Initialize()
{
AvaloniaXamlLoader.Load(this);
IoC.Get<IWindowManager>().ShowWindow<IView>();
}
```
Теперь при нажатии кнопки "Press Me!" будет изменена страница на "HomePageView". Вы можете найти полный пример кода в репозитории на GitHub: [https://github.com/Zakarayaev/avproj1](https://github.com/Zakarayaev/avproj1).