我正在开发一个执行某些自定义财务数据导入的应用程序,并且用户需要能够对数字进行少量更改以使事务平衡。 (有时在一个系统或另一个系统中舍入错误会导致不平衡,需要手动调整)。错误发生在我无法控制的两个系统之间,而变更的性质需要人来决定要做出哪些改变。
我已经让数据绑定工作,除了输入数据时有一个很大的烦恼。如果用户想要输入一个非常小的负数,输入将继续覆盖其输入以删除负号和小数位。
例如:如果我尝试不停止地键入'-0.06',我最终只得到'6'。如果我在到达6之前停止。如果我输入'-0.0'并且意识到某些事情搞砸了,那么所有的都是'0'。可以输入所需的值,但我需要进行一系列编辑,如'1006','10.06','0.06',' - 0.06'。这不是很有效率,也很难教别人去做。
我的模板列的XAML如下:
<DataGridTemplateColumn Header="Amount">
<DataGridTemplateColumn.CellTemplate>
<DataTemplate>
<TextBlock Text="{Binding Path=LineAmount, Mode=OneWay, StringFormat=C2}"/>
</DataTemplate>
</DataGridTemplateColumn.CellTemplate>
<DataGridTemplateColumn.CellEditingTemplate>
<DataTemplate>
<TextBox Text="{Binding Path=LineAmount, Mode=TwoWay, UpdateSourceTrigger=PropertyChanged}"/>
</DataTemplate>
</DataGridTemplateColumn.CellEditingTemplate>
</DataGridTemplateColumn>
有什么建议吗?我尝试过制作自定义IValueConverter
,但仍然遇到同样的问题。
答案 0 :(得分:1)
我认为直接绑定到双重是给你问题的原因。想一想,当你第一次输入“ - ”表示无法转换为double时,所以不能应用字符串格式,打破它。您可以在运行时期间在Visual Studio的Output
窗口中看到此内容。相反,创建一个支持属性,它将从字符串转换为double,然后更新双倍数量。
<DataGridTemplateColumn Header="Amount">
<DataGridTemplateColumn.CellTemplate>
<DataTemplate>
<TextBlock Text="{Binding Path=LineAmount, Mode=OneWay, StringFormat=C2}"/>
</DataTemplate>
</DataGridTemplateColumn.CellTemplate>
<DataGridTemplateColumn.CellEditingTemplate>
<DataTemplate>
<TextBox Text="{Binding Path=LineAmountStr, Mode=TwoWay, UpdateSourceTrigger=PropertyChanged}"/>
</DataTemplate>
</DataGridTemplateColumn.CellEditingTemplate>
</DataGridTemplateColumn>
您的视图模型类:
public class TheViewModel
{
private string _lineAmountStr;
public string LineAmountStr
{
get { return _lineAmountStr; }
set
{
double amt;
if(double.TryParse(value, out amt))
{
LineAmount = amt;
}
_lineAmountStr = value;
NotifyPropertyChanged("LineAmountStr");
}
private double _lineAmount;
public double LineAmount
{
get { return _lineAmount; }
set
{
_lineAmount = value;
NotifyPropertyChanged("LineAmount");
}
}
}