将文本框绑定到Propery并输入小于-1的负数时出现问题 - 例如-0.45:
文本框:
<TextBox Text="{Binding Txt, Mode=TwoWay, UpdateSourceTrigger=PropertyChanged}"/>
和财产:
double txt;
public double Txt
{
get { return txt; }
set { txt = value; OnPropertyChanged("Txt"); }
}
似乎当我尝试输入-0.54时,它立即变为0,为什么?
答案 0 :(得分:5)
这是完成工作的转换器(因此,请保留您的视图模型 - 您可以将它用于十进制和双精度)。我们最初需要保持小数和-ve位置:
public class DecimalConverter:IValueConverter
{
public object Convert(object value, Type targetType, object parameter, CultureInfo culture)
{
if (value !=null)
{
return value.ToString();
}
return Binding.DoNothing;
}
public object ConvertBack(object value, Type targetType, object parameter, CultureInfo culture)
{
string data = value as string;
if (data == null)
{
return value;
}
if (data.Equals(string.Empty))
{
return 0;
}
if (!string.IsNullOrEmpty(data))
{
decimal result;
//Hold the value if ending with .
if (data.EndsWith(".") || data.Equals("-0"))
{
return Binding.DoNothing;
}
if (decimal.TryParse(data, out result))
{
return result;
}
}
return Binding.DoNothing;
}
}
因此,我们持有值或在绑定上不做任何事情
答案 1 :(得分:1)
当你输入十进制值时,它再次变为0,所以最好的方法是使用lostfocus触发器:
<TextBox Text="{Binding Txt, Mode=TwoWay, UpdateSourceTrigger=LostFocus}" Grid.Row="0"/>
您还需要在视图模型中执行此操作:
public double Txt
{
get { return txt; }
set
{
if (!txt.Equals(value))
{
txt = value;
OnPropertyChanged("Txt");
}
}
}