我创建了一个UserControl
,其中包含Text Property
。
Text Property
:
private string _Text;
public string Text
{
set
{
_Text= value;
}
get
{
return _Text;
}
}
现在,当我输入TextValueChanged
时,我希望Text Property
事件为Text Property
。我该怎么办?提前谢谢。
答案 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)
您需要实现INotifyPropertyChanged接口。 http://www.codeproject.com/Articles/41817/Implementing-INotifyPropertyChanged