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

У меня есть несколько 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 code

Редактировать 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);};

1 Ответ

0 голосов
/ 27 декабря 2018

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

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

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

...