2015-07-30 4 views
1

Я создал UserControl который содержит Text Property.Создайте свойство пользовательского пользовательского элемента управления с помощью C# Winforms

Text Property:

private string _Text; 
public string Text 
    { 
     set 
     { 
      _Text= value; 
     } 
     get 
     { 
      return _Text; 
     } 
    } 

Теперь я хочу, чтобы получить TextValueChanged событие Text Property, когда я набираю в Text Property. Что мне делать? Заранее спасибо.

ответ

1

В МОФ, сначала создайте другой класс и создать для Уведомлять свойство изменилось viewmodelbase класс:

public abstract class ViewModelBase : INotifyPropertyChanged, IMVVMDockingProperties 
    { 
protected void OnPropertyChanged(string propertyName) 
     { 
      PropertyChangedEventHandler handler = PropertyChanged; 

      if (handler != null) 
      { 
       handler(this, new PropertyChangedEventArgs(propertyName)); 
      } 
     } 
} 

тогда, когда вы реализуете это свойство просто добавить еще одну строку кода:

private string _Text; 
public string Text 
    { 
     set 
     { 
      _Text= value; 
     } 
     get 
     { 
      return _Text; 
      **OnPropertyChanged("Text");** 
     } 
    } 

также, если вы хотите получать уведомления о каждом событии, введенном символом, добавьте это в свой переплет:

Binding="{Binding Path=Text, **UpdateSourceTrigger=PropertyChanged**, Mode=TwoWay}" 
+0

Я создал UserControl с помощью Windows, библиотеки управления Form , и добавлено в ToolBox – AJHope

+0

реализация в классе остается такой же. –

2

Вы используете приложение MVVM? Если установить удобный MvvmLight Toolkit вы можете сделать это следующим образом:

private string _Text; 
public string Text 
{ 
    set 
    { 
     if (_Text != value) 
     { 
      _Text = value; 
      RaisePropertyChanged(() => Text); 
     } 
    } 

    get 
    { 
     return _Text; 
    } 
} 

и связать его следующим образом, на ваш взгляд (XAML):

<TextBox Text="{Binding Text} /> 
3

Если это свойство и вам нужно передать старое текстовое значение/новое значение текста - вы должны создать свои собственные аргументы и передать так:

public class TextChangedEventArgs : EventArgs 
{ 
    public string PreviousText; 
    public string CurrentText; 

    public TextChangedEventArgs(string previousText, string currentText) 
    { 
     PreviousText = previousText; 
     CurrentText = currentText; 
    } 
} 

public delegate void TextChangedEventHandler(Object sender, TextChangedEventArgs e); 

После этого вы должны просто проверить - это любое событие имеет свое и запустить его:

public event TextChangedEventHandler TextChanged; 
    private string _Text; 
    public string Text 
    { 
     set 
     { 
      var previousText = _Text; 

      _Text = value; 

      if (TextChanged != null) 
      { 
       var args = new TextChangedEventArgs(previousText, value); 
       TextChanged(this, args); 
      } 
     } 
     get 
     { 
      return _Text; 
     } 
    } 

Чтобы использовать это событие, вы должны прикрепить его (в конструкторе управления, например):

TextChanged += TextChangedFunc; 

И добавить новую FUNC:

void TextChanged(object sender, TextChangedEventArgs e) 
    { 
     // YOUR CODE HERE 
    } 
+0

Я хочу поймать событие в этом UserControl, чтобы что-то сделать. Что я делаю? – AJHope

+0

Можете ли вы меня понять. У вас есть WinForms, и у вас есть компонент textEdit? Или у вас есть только текстовое поле в классе? В первом случае - вы должны открыть конструктор и найти в событиях «TextChanged» .Если второй - просто используйте мой код.Чтобы прикрепить событие добавить в consructor - откройте мой ответ, я обновил его. –

+0

обработчик регистра с событием TextChanged. TextChanged + = (s, e) => {// do staff} ' –

Смежные вопросы

 Смежные вопросы