我有一个带文本框的usercontrol。文本框文本属性的绑定方式如下:
<TextBox Background="{Binding Path=Background, ElementName=_this}">
<TextBox.Text>
<Binding ElementName="_this"
Path="VisibleValue"
UpdateSourceTrigger="PropertyChanged"
Mode="TwoWay"
ValidatesOnExceptions="True">
</Binding>
</TextBox.Text>
</TextBox>
代码隐藏:
public String VisibleValue
{
get { return _visibleValue; }
set
{
if (_visibleValue == value) { return; }
_visibleValue = value;
SetValue(value);
RaisePropertyChanged("VisibleValue");
}
}
&#39; SetValue&#39;方法尝试将字符串转换为int,double等...并设置依赖属性&#39;值&#39;。 (如果输入字符串为null或为空,则&#39; Value&#39;属性将设置为null)。
public const string ValuePropertyName = "Value";
public static readonly DependencyProperty ValueProperty = DependencyProperty.Register(
ValuePropertyName,
typeof(Object),
typeof(NumericInput),
new UIPropertyMetadata(null, OnValueChangedCallback));
public Object Value
{
get
{
return (Object)GetValue(ValueProperty);
}
set
{
SetValue(ValueProperty, value);
}
}
现在在另一个视图中我使用此用户控件并且我绑定了value属性:
<sharedControls:NumericInput Type="{x:Type sys:UInt16}"
Value="{Binding VehicleLine, TwoWay, PropertyChanged}"/>
viewmodel中的VehicleLine属性:
public ushort VehicleLine
{
get { return this.vehicleLine; }
set
{
if (this.vehicleLine == value) { return; }
this.vehicleLine = value;
RaisePropertyChanged("VehicleLine");
RaiseVariantInfoChanged();
}
}
我现在的问题是:如果我在文本框中输入一个随机数字,如1,2,3,4,那么该值就会传递给我的车辆号码。但是如果文本框为空,则Value依赖项属性设置为null,但不会将其传递给我的vehicleline属性。永远不会调用此属性的setter。
任何人都可以解释我为什么吗?
注意:即使我将vehicleline属性类型更改为object,也不会调用setter。
提前谢谢你!