使用c#Winforms创建自定义用户控件的属性

时间:2015-07-30 07:11:09

标签: c# winforms

我创建了一个UserControl,其中包含Text Property

Text Property

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

现在,当我输入TextValueChanged时,我希望Text Property事件为Text Property。我该怎么办?提前谢谢。

4 个答案:

答案 0 :(得分: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;

添加新功能:

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

答案 1 :(得分: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} />

答案 2 :(得分:1)

在Wpf中,首先创建一个不同的类并创建一个Notify属性已更改 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}"

答案 3 :(得分:1)