Я довольно много прочитал и поискал в Интернете, но у меня возникла проблема. трудное время.
Я попробовал установить свойство CaretPosition в файле XAML. И я попытался связать его со свойством в моей ViewModel. И я получаю следующую ошибку:
Код: Выделить всё
**A 'Binding' cannot be set on the 'CaretPosition' property of type 'RichTextBox'. A 'Binding' can only be set on a DependencyProperty of a DependencyObject.**Мне хотелось бы получить несколько указателей или пример кода о том, как можно реализовать настройку позиции курсора элемента управления RichTextBox (или даже элемента управления TextBox) через ViewModel. Будем очень признательны за любую помощь.
ОБНОВЛЕНИЕ: Добавлен код для файлов cs и xaml. Код ниже работает без каких-либо ошибок. Я также добавил текстовое поле и элемент управления форматированного текстового поля, так как хотел опробовать оба, если бы любой из них было бы проще реализовать в коде, чтобы элемент управления переместился в конец обновленного текста (я удалил ' Привязка» к «CaretPosition», поскольку она не работает.)
Вот код для MainWindowViewModel.cs.
Код: Выделить всё
using System.ComponentModel;
using System.Windows.Input;
namespace RichTextBox_CaretPos
{
class MainWindowViewModel : INotifyPropertyChanged
{
private string? m_TextOutput = "";
public ICommand UpdateText { get; set; }
public string? TextOutput
{
get
{
return m_TextOutput;
}
set
{
m_TextOutput = value;
OnPropertyChanged(nameof(TextOutput));
}
}
#region INotifyPropertyChanged Members
public event PropertyChangedEventHandler? PropertyChanged;
private void OnPropertyChanged(string propertyName)
{
if (PropertyChanged != null)
{
PropertyChanged?.Invoke(this, new PropertyChangedEventArgs(propertyName));
}
}
#endregion
public void UpdateTextObjects(object? parameters)
{
TextOutput = "Line 1\nLine 2\nLine 3\nLine 4\nLine 5\nLine 6\nLine 7\nLine 8\nLine 9\nLine 10\nLine 11\nLine 12\nLine 13\nLine 14\nLine 15\n----------\n";
}
public MainWindowViewModel()
{
UpdateText = new RelayCommand(UpdateTextObjects);
TextOutput = "Here we go...\n";
}
}
public class RelayCommand : ICommand
{
public event EventHandler? CanExecuteChanged;
private Action m_Execute;
private Predicate m_CanExecute;
public RelayCommand(Action execute) : this(execute, null)
{
}
public RelayCommand(Action execute, Predicate? canExecute)
{
m_Execute = execute;
m_CanExecute = canExecute;
}
public void Execute(object? parameter)
{
m_Execute(parameter);
}
public bool CanExecute(object? parameter)
{
if (m_CanExecute == null)
{
return true;
}
return m_CanExecute(parameter);
}
public void RaiseCanExecuteChanged()
{
if (CanExecuteChanged != null)
{
CanExecuteChanged(this, EventArgs.Empty);
}
}
}
}
Код: Выделить всё
При нажатии кнопки текст добавляется в элементы управления TextBox и RichTextBox. Однако текстовое поле не прокручивается до конца.
p.s. Я не эксперт по C#. На самом деле, я довольно новичок в этом. Итак, я действительно борюсь с этим. Я пробовал использовать/реализовать «Поведение», но это тоже не помогло.
Буду очень признателен за любую помощь.
Подробнее здесь: https://stackoverflow.com/questions/787 ... -viewmodel