Avalonia UI - Как получить / установить свойства элементов управления UI из кода

У меня есть несколько TabControlопределены в моем XAML. Я хотел бы, чтобы моя ViewModel знала о TabItem имя или индекс TabItem это выбрано.

у меня тоже есть ScrollViewer что я хотел бы всегда прокручивать вниз, когда нажата кнопка.

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

Как я могу получить что-то вроде этого:

var tabIndex = this.GetElement<TabControl>("NameOfSomeTabControl").SelectedIndex;

var scrollViewer = this.GetElement<ScrollViewer>("NameOfSomeScrollViewer");
scrollViewer.VerticalScrollBarValue = scrollViewer.VerticalScrollBarMaximum;

Изменить: код для XAML, код ViewModel

Редактировать 2: Похоже, я могу получить экземпляр элемента из класса окна, однако я все еще не уверен, как передать ссылку на ViewModel.

Изменить 3: я могу добиться просмотра прокрутки, идущего вниз, автоматически с помощью кода ниже. однако, когда этот метод вызывается, кажется, что прокрутка отключена.

var tbRaw = this.Get<TextBlock>("tbRawOutput");
tbRaw.PropertyChanged += (s,e) => {
    var svRaw = this.Get<ScrollViewer>("svRawOutput");
    svRaw.Offset = new Vector(svRaw.Offset.X, svRaw.Extent.Height -svRaw.Viewport.Height);};

0 ответов

Более простой способ сделать это - использовать DataContextChanged обработчик событий в вашем главном Window учебный класс:

public MainWindow()
{
    InitializeComponent();
    DataContextChanged += (object sender, EventArgs wat) =>
    {
        // here, this.DataContext will be your MainWindowViewModel
    };
}

Затем вы можете прикрепить больше обработчиков событий / использовать геттеры и сеттеры к модели представления из Window

Другие вопросы по тегам