当我添加值或在文本框中更改它时,转换器每次都会触发。当我删除/清除值时,转换器永远不会触发。在保存空文件之后,它实际上还保存了以前的值。
<TextBox Text="{Binding FemaleCT, Mode=TwoWay, UpdateSourceTrigger=PropertyChanged}" PreviewTextInput="NumberValidationTextBox" VerticalContentAlignment="Center" TextAlignment="Center" Width="100">
<TextBox.Background>
<MultiBinding Converter="{StaticResource inToleranceHighlightsConverter}">
<Binding Path="FemaleCT"></Binding>
<Binding ElementName="MF" Path="Text"></Binding>
<Binding ElementName="MF_LowTolerance" Path="Text"></Binding>
<Binding ElementName="MF_HighTolerance" Path="Text"></Binding>
<Binding ElementName="SampleEnabled" Path="Text"></Binding>
</MultiBinding>
</TextBox.Background>
</TextBox>
这可能很重要,数据值FemaleCT是可为空的十进制,并且是ObservableCollection的一部分。
public ObservableCollection<MouldCTModel> ctMeasurements
{
get { return _ctMeasurements; }
set { _ctMeasurements = value; this.RaisePropertyChanged(nameof(ctMeasurements)); CanSignScreen(); }
}
这是正常行为还是我做错了什么?
答案 0 :(得分:2)
您的问题是将十进制数绑定到字符串属性。 string.empty无法转换为十进制,因此绑定失败并且该属性不会更新。由于该属性不变,因此不会触发转换器,并且该对象仍具有其旧值。
我发现最好将数字,日期等包装在字符串中:
private string femaleCT;
public string FemaleCT
{
get
{
return this.femaleCT;
}
set
{
this.femaleCT = value;
decimal temp;
if (decimal.TryParse(value, out temp))
{
this.model.FemaleCT = temp;
}
this.NotifyPropertyChanged();
}
}
然后编写转换器以获取一个字符串,当字符串为空或无效值时,它可以决定该怎么做。
此方法还允许您验证字符串值。验证模型还不够,因为只有在值是有效数字时才会更新模型。