是否可以在WPF中的TextBox上使用PropertyChanged
而不是TextChanged
?如何知道PropertyChanged
是否被触发?
我有这样的TextBox:
<TextBox x:Name="kodpTxt" Text="{Binding Selected.KodP,UpdateSourceTrigger=PropertyChanged}" Width="75" Margin="84,55,0,0" />
我宁愿避免TextChanged
事件,因为我从数据库更改kodpTxt
绑定并且它的长度并不总是相同,所以我无法检查是否kodpTxt.Text.Length >= 5
等。
我一直在寻找替代方案,并意识到我可以使用PropertyChanged
做些什么,但我不知道如何找出PropertyChanged
发生的时间。
private string _kodp;
public string KodP
{
get { return _kodp; }
set
{
_kodp = value;
OnPropertyChanged("KodP");
}
}
public void OnPropertyChanged(string name)
{
if (PropertyChanged != null)
{
PropertyChanged(this, new PropertyChangedEventArgs(name));
}
}
public event PropertyChangedEventHandler PropertyChanged;
为了形象化我的问题,我会稍微描述一下:
我有ViewModel
和UserControl
kodpTxt
TextBox。在UserControl
我设置了Selected.XYZ
个职位。我无法操纵来自UserControl
的{{1}}控件。这就是为什么我要找的东西:
ViewModel
你能解释一下吗?
答案 0 :(得分:2)
使用Mode=TwoWay
<TextBox x:Name="kodpTxt" Text="{Binding Selected.KodP, Mode=TwoWay, UpdateSourceTrigger=PropertyChanged}" Width="75" Margin="84,55,0,0" />
您将为setter
属性调用Selected.KodP
。
这就是你如何得到这个活动。
答案 1 :(得分:1)
由于Alexy has already said在绑定中使用Mode.TwoWay
,因此您可以在属性设置器中执行检查,如下所示:
public string KodP
{
get { return ... }
set
{
if(value.Length >= 5)
{
...
}
// Set the value to your field / database etc.
}
}
使用此方法,不需要调用任何事件,因为您可以直接在属性设置器中执行检查/调用方法等。