我有一个datagrid用户输入值。这是一栏:
<datagrid:ThemedDataGrid AutoGenerateColumns="False" CanUserAddRows="False" CanUserDeleteRows="True" ItemsSource="{Binding Model.ItemCollection, UpdateSourceTrigger=PropertyChanged}"
SelectionUnit="FullRow"
SelectedItem="{Binding Model.SelectedItem}" >
<datagrid:ThemedDataGrid.Columns >
<datagrideditors:DataGridDoubleColumn Binding="{Binding OFFSET, UpdateSourceTrigger=PropertyChanged}" Header="{DynamicResource Offset}" />
</datagrid:ThemedDataGrid.Columns>
</datagrid:ThemedDataGrid>
我需要允许用户在小数部分只输入5个数字。所以我用这种方式制作了OFFSET属性:
public new double OFFSET
{
get { return _offset; }
set
{
int count = 0;
bool isSeparator = false;
char a = Convert.ToChar(CultureInfo.CurrentCulture.NumberFormat.NumberDecimalSeparator);
var formatted = value.ToString().ToCharArray();
foreach (var y in formatted)
{
if (!isSeparator)
{
if (y == a)
{
isSeparator = true;
}
}
else
{
count++;
}
}
if (isSeparator)
{
if (count > 5)
{
return;
}
}
_offset = value;
OnPropertyChanged();
}
}
用户不允许输入小数部分的第六位数字,此处用户可以输入他想要的数字,只有当他输入数值时,小数值才会变为小数部分的5位数值。
如何解决这个问题?
答案 0 :(得分:0)
我说英语可能是第二语言,但这不清楚
不允许用户输入小数部分的第六位数字,并且 在这里,用户可以输入他想要的数字,只有当他 输入值,小数值更改为5位数的值 分数部分。
考虑
if (count > 5) { return; }
您对DataGrid中的值没有任何作用 您需要为_offset分配正确的值并调用OnPropertyChanged();
例如
if (count > 5)
{
_offset = 5.55555;
// I leave it to you to properly assign _offset;
OnPropertyChanged();
return;
}
StringBuilder() sb = new StringBuilder();
foreach (var y in formatted)
{
if (!isSeparator)
{
if (y == a)
{
isSeparator = true;
}
}
else
{
count++;
if (count > 5) break;
}
sb.Append(y);
}
if (isSeparator)
{
if (count > 5)
{
_offset = Double.Parse(sb.ToString());
OnPropertyChanged();
return;
}
}
如果您使用的是.NET 3.5或4.0,那么您可能会遇到UI未更新的问题 但是在.NET 4.5上它对我来说很好。