@Mootfrost
C#, C++, JS, Python

Как сменить View в Avalonia?

Я сделал фронт для нескольких видов и теперь разбираюсь как их сменять из кода, например после инициализации приложения открывать главное окно. Я нашел что-то про ViewLocator в доках, ноя не понимаю как мне им пользоваться. Может есть какой-нибудь пример кода с переключением видов или какой-то конкретный метод?
  • Вопрос задан
  • 513 просмотров
Пригласить эксперта
Ответы на вопрос 1
@OneCellDM
Если вы используете MVVM то вот вам мой код

В коде ViewModel основной формы сделайте обновляемое свойство:
[Reactive]
  public bool ZipViewModelVisible { get; set; }


Затем вставьте нужный вам UserControl на форму и свяжите со свойством, у меня это: ZipViewModelVisible

После изменения значения свойства будет скрываться или показываться UserControl

<Window xmlns="https://github.com/avaloniaui"
        xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
        xmlns:vm="using:AvaloniaImageCompress.ViewModels"
	xmlns:view="using:AvaloniaImageCompress.Views"
        xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
        xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
	xmlns:b="using:AvaloniaImageCompress.Behaviors"
        mc:Ignorable="d" d:DesignWidth="800" d:DesignHeight="450"
        xmlns:idd="clr-namespace:Avalonia.Xaml.Interactions.DragAndDrop;assembly=Avalonia.Xaml.Interactions"
        x:Class="AvaloniaImageCompress.Views.MainWindow"
        Icon="/Assets/avalonia-logo.ico"
		
        Title="AvaloniaImageCompress" >
	
    <Design.DataContext>
        <vm:MainWindowViewModel/> 
    </Design.DataContext>
	<Grid Background="White" >
		

		<view:ZipView 
			DataContext="{Binding ZipViewModel}" / Контекст данных
			IsVisible="{Binding DataContext.ZipViewModelVisible,  / привязка свойства к родительскому  контексту данных
								RelativeSource={RelativeSource Mode=FindAncestor, AncestorType={x:Type Window}}}"/>
		
	</Grid>
	
	
</Window>


PS: Для обновления свойства используется ReactiveUI.Fody
Проект с которого был взят данный код
Ещё один проект с данным подходом
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы