Реализация навигации в Авалонии с помощью инструментария сообщества MVVMC#

Место общения программистов C#
Ответить Пред. темаСлед. тема
Anonymous
 Реализация навигации в Авалонии с помощью инструментария сообщества MVVM

Сообщение Anonymous »

Я пытаюсь реализовать простую навигацию, которая представляет собой просто MainWindow с ContentPresenter поверх него. Большая часть кода генерируется автоматически. Я только добавил ContentPresenter, привязал его содержимое к CurrentPage и создал представление и модель представления для домашней страницы
MainWindow.axaml
Весь код генерируется автоматически, кроме ContentPresenter










MainWindowViewModel.cs
using CommunityToolkit.Mvvm.ComponentModel;

namespace AvaloniaApplication5.ViewModels
{
public partial class MainWindowViewModel : ViewModelBase
{
[ObservableProperty]
private ViewModelBase _currentPage = new HomeViewModel();
}
}

HomeView.axaml
Пустой файл UserControl, который должен работать как страница, на которую переходит ContentPresenter

Welcome to Avalonia!


HomeViewModel.cs
namespace AvaloniaApplication5.ViewModels
{
public class HomeViewModel : ViewModelBase
{
}
}

Результатом работы этого кода должно быть отображение HomeView.axaml в ContentPresenter, но на самом деле он не может найти HomeView.axaml.
Также есть ViewLocator, который разрешает представление, соответствующее определенной ViewModel. Этот файл создан полностью автоматически
ViewLocator.cs
using Avalonia.Controls;
using Avalonia.Controls.Templates;
using AvaloniaApplication5.ViewModels;
using System;

namespace AvaloniaApplication5
{
public class ViewLocator : IDataTemplate
{

public Control? Build(object? data)
{
if (data is null)
return null;

var name = data.GetType().FullName!.Replace("ViewModel", "View", StringComparison.Ordinal);
var type = Type.GetType(name);

if (type != null)
{
var control = (Control)Activator.CreateInstance(type)!;
control.DataContext = data;
return control;
}

return new TextBlock { Text = "Not Found: " + name };
}

public bool Match(object? data)
{
return data is ViewModelBase;
}
}
}

Похоже, что ViewLocator действительно работает так, как задумано, и ContentPresenter хочет отобразить HomeView, но не может его найти.
Я попробовал указать данные Контекст для HomeView, но он ничего не сделал
HomeView.axaml.cs
public HomeView()
{
InitializeComponent();
DataContext = new HomeViewModel();
}



Подробнее здесь: https://stackoverflow.com/questions/790 ... ty-toolkit
Реклама
Ответить Пред. темаСлед. тема

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение

Вернуться в «C#»