Как я могу указать DataContext, чтобы быть модулем кода-и-завода для любого данного XAML? (Пример преобразования «AvalonC#

Место общения программистов C#
Ответить Пред. темаСлед. тема
Anonymous
 Как я могу указать DataContext, чтобы быть модулем кода-и-завода для любого данного XAML? (Пример преобразования «Avalon

Сообщение Anonymous »

Извините, другой вопрос начинающего.

Я пытаюсь включить пример из документации Avalonia в свой тестовый проект, но я застрял в попытке использовать mainwindowviewmodel < /strong> также как code-behind для mainwindow (mainwindow.axaml.cs)
Пример-последний на https://docs.aloniaui.net/docs/ ссылка/элементы управления/combobox, что, к сожалению, немного устаревшей.

Код: Выделить всё

    









using Avalonia.Controls;
using Avalonia.Media;
using System.Linq;

namespace AvaloniaControls.Views
{
public partial class MainWindow : Window
{
public MainWindow()
{
InitializeComponent();
fontComboBox.Items = FontManager.Current
.GetInstalledFontFamilyNames()
.Select(x => new FontFamily(x))
.OrderBy(x=>x.Name);
fontComboBox.SelectedIndex = 0;
}
}
}
< /code>
Mainwindow имеет несколько других элементов управления с использованием модели представления MVVM < /p>
x:DataType="vm:MainWindowViewModel"
< /code>
Поэтому, когда я введите {привязку} Rider полезно напоминает мне с  '(mainwindowviewmodel). Path = '< /em>
Я также узнал, что при использовании термина «привязка» это должно быть с свойством - если, возможно, это не в коде.
(что просто Сделаю голову, когда я пытаюсь заполнить, в данном случае, Combobox.) Данные, которые я ожидаю) < /p>
public List lFonts = new List();
public MainWindow()
{
InitializeComponent();
ColourComboBox.ItemsSource = ColourBasesTxt;
ThemesComboBox.ItemsSource = Themes;

IFontCollection allFonts = FontManager.Current.SystemFonts;
foreach (var font in allFonts)
{
lFonts.Add(font.Name);
}
FontComboBox.ItemsSource = lFonts;
< /code>
Теперь то, что я не могу тренироваться, это как связать это с XAML.  Пример кода был < /p>
  






< /code>
в моем коде < /p>
  






< /code>
Теперь < /p>

< /code>
не работает, потому что он пытается связываться с mainwindowviewmodel.name

Я попробовал много сумасшедших предложений, чтобы получить контекст данных в DataTemplate, чтобы быть кодом- позади.

Все, кроме 1, не проходили проверку синтаксиса.
Я не могу переориентировать весь Combobox, потому что «SelectedItem» должен быть на свойство в MainwindowViewModel (что это есть). < /p>
Тот, кто приблизился, - < /p>

, который на самом деле работал, но Combobox заполнен текстом ' avalonia.controls.combobox ' line после строки.
Мне жаль, что я настолько новичок в этом методе, что мне даже не хватает языка, чтобы правильно сформулировать вопрос. Используйте «Источник» (код, поставляющий содержимое списка) в одном модуле и «SelectedItem» в другом модуле. » «Как вы можете указать DataContext, чтобы стать кодом, стоящим за модулем для любого данного XAML» < /em> < /p>
Спасибо за терпение
jc < /p>
Добавление полный код для вырезанной версии. Любой автоматический сгенерированный код был оставлен в
mainwindow.axaml

Код: Выделить всё









































< /code>
mainwindow.axaml.cs
using System;
using System.Collections.Generic;
using System.Linq;
using Avalonia.Controls;
using Avalonia.Fonts.Inter;
using Avalonia.Media;
using Avalonia.Media.Fonts;

namespace Colour_Font_experiment3v1_snip.Views;

public partial class MainWindow : Window
{
private string[] Themes = new string[] { "Dark", "Light" };
private List lFonts = new List();
public MainWindow()
{
InitializeComponent();
ThemesComboBox.ItemsSource = Themes;
IFontCollection allFonts = FontManager.Current.SystemFonts;
foreach (var font in allFonts)
{
Console.WriteLine(font.Name);
lFonts.Add(font.Name);
}
Console.WriteLine($"{lFonts.Count} font Names loaded");
FontComboBox.ItemsSource = lFonts;

FontComboBox.SelectedIndex = 0;
}
}
< /code>
mainwindowviewmodel < /p>
using System;
using System.Collections.Generic;
using System.Collections.ObjectModel;
using System.Diagnostics;
using System.IO;
using System.Linq;
using System.Reactive;
using Avalonia;
using Avalonia.Interactivity;
using ReactiveUI;
using Romzetron.Avalonia;

namespace Colour_Font_experiment3v1_snip.ViewModels;
public class MainWindowViewModel : ViewModelBase
{

// *****************************************************************
private string _dummyPlaceHolder  = "Under Construction!";
public string DummyPlaceHolder
{
get => _dummyPlaceHolder;
set => this.RaiseAndSetIfChanged(ref _dummyPlaceHolder, value);
}
public ReactiveCommand SaveButtonClick { get; }

private string _selectedTheme = "Light";
public string SelectedTheme
{
get => _selectedTheme;
set => this.RaiseAndSetIfChanged(ref _selectedTheme, value);
}

private string _selectedFont;
public string SelectedFont
{
get => _selectedFont;
set => this.RaiseAndSetIfChanged(ref _selectedFont, value);
}

private string _startFolder = @"M:\Museum\ManagedCatalog";
public string StartFolder
{
get => _startFolder;
set => this.RaiseAndSetIfChanged(ref _startFolder, value);
}

// **********************************************************
// Constructor
public MainWindowViewModel()
{
SaveButtonClick = ReactiveCommand.Create(PerformSaveAction);
DummyPlaceHolder = "Current Colour Base is : 'redacted' " ;
}

private void PerformSaveAction()
{
Console.WriteLine("The \'Set / Save\' button was pressed.");
}

//*******************************************
private ColorTheme getCurrentTheme()
{
return GetRomzetronAvaloniaTheme().ColorTheme;
}
// **********************************************************
// JC added from https://github.com/Romzetron/Romzetron.Avalonia?tab=readme-ov-file
private static RomzetronTheme? GetRomzetronAvaloniaTheme()
{
// Get a reference to the current application.
if (Application.Current is not App app)
return null;

// Loop through the styles in the application.
foreach (var style in app.Styles)
{
// Return RomzetronTheme if it is found.
if (style is RomzetronTheme theme)
return theme;
}
return null;
}

}
< /code>
и просто на перефокусировку. Проблема состоит в том, чтобы получить линию XAML < /p>
   
фактически подключен к lfonts в коде, стоящем за
Еще раз спасибо
jc

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

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

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

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

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

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

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