установить текст текстового поля с помощью wpf и Devexpress MVVM

Как я могу установить Text из Textbox с помощью wpf и бесплатного MVVM Devexpress при нажатии кнопки?

Это код xaml моего текстового поля

<TextBox Width="200" Grid.Column="1" Text="{Binding SelectedText, Mode=TwoWay, UpdateSourceTrigger=PropertyChanged}" FontSize="14"/>

это мой код виртуальной машины

        public virtual string SelectedText { get; set; }
        void AutoUpdateCommandExecute()
        {
            Console.WriteLine("Code is Executing");
            SelectedText = "TextBox Text is Not Changing";
        }

Код выполняется, но он не меняет Text из Textbox

Но когда я набираю что-то в textbox и получаю текст этого текстового поля, используя этот код.

        void AutoUpdateCommandExecute()
        {
            Console.WriteLine("Code is Executing");
            Console.WriteLine(SelectedText);
        }

Он печатает текст, который я набрал в текстовом поле. Так что я сделал не так? Я не могу установить текст?

Спасибо.


person outlook email    schedule 25.08.2017    source источник


Ответы (1)


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

public static readonly DependencyProperty SelectedTextProperty = DependencyProperty.Register("SelectedText", typeof(string), typeof(YourClassType));

public string SelectedText
{
  get { return (string)GetValue(SelectedTextProperty ); }
  set { SetValue(SelectedTextProperty , value); }
}

OR

ваша виртуальная машина должна реализовать интерфейс INotifyPropertyChanged, а в установщике SelectedText вам нужно запустить событие изменения свойства...

public class VM : INotifyPropertyChanged
{
  public event PropertyChangedEventHandler PropertyChanged;
  private string _selectedText;
  public string SelectedText
  {
    get { return _selectedText; }
    set
    {
      _selectedText = value;
      RaisePropertyChanged("SelectedText");
    }
  }

  private void RaisePropertyChanged(string propertyName)
  {
    PropertyChanged?.Invoke(this, new PropertyChangedEventArgs(propertyName));
  }
}
person CodexNZ    schedule 25.08.2017
comment
Спасибо, ты спас меня. я использовал второй. Но мой вопрос в том, что делать, это поставить его здесь? в YourClassType ****typeof(YourClassType) - person outlook email; 25.08.2017
comment
DependencyProperty принадлежит классу, в котором он определен, поэтому, если класс называется ClassExample, регистр DependencyProperty будет иметь typeof(ClassExample). Это сообщает фреймворку, в каком классе найти свойство. - person CodexNZ; 25.08.2017
comment
Спасибо. Ваше объяснение мне очень помогло - person outlook email; 25.08.2017