Я хотел бы отобразить некоторые значения в DataGrid. Один столбец должен отображать целочисленные значения. Когда пользователь вводит нецифровые символы, я хочу сообщить об этом пользователю, но это значение может сохраняться, хотя.
В настоящее время я использую шаблон ValidationTemplate для DataGridRow. Проблема в том, что полная строка ... полная DataGrid больше не редактируется, пока целое значение не будет введено в конкретную ячейку.
Как я могу добиться этого, чтобы сообщить пользователю, что он ввел неправильное vlaue, но разрешить это в конце?
Вот стиль, который я сейчас использую:
<Style x:Key="errorRowStyle" TargetType="{x:Type DataGridRow}">
<Setter Property="ValidationErrorTemplate">
<Setter.Value>
<ControlTemplate>
<Grid>
<Ellipse Width="12" Height="12" Fill="Red" Stroke="Black" StrokeThickness="0.5"/>
<TextBlock FontWeight="Bold" Padding="4,0,0,0" Margin="0" VerticalAlignment="Top" Foreground="White" Text="!" />
</Grid>
</ControlTemplate>
</Setter.Value>
</Setter>
<Style.Triggers>
<Trigger Property="Validation.HasError" Value="true">
<Setter Property="BorderThickness" Value="1"/>
<Setter Property="BorderBrush" Value="Red"/>
<Setter Property="IsEnabled" Value="True" />
<Setter Property="ToolTip" Value="{Binding RelativeSource={x:Static RelativeSource.Self}, Path=(Validation.Errors)[0]}"/>
</Trigger>
</Style.Triggers>
</Style>
Обновление 2018-01-13:
DataGrid: при ошибке проверки ячейки другие ячейки строки недоступны для редактирования / только для чтения
очень близок к моей проблеме, но это не решает проблему, заключающуюся в том, что введенное (недействительное) значение не , введенное в ObservableCollection
привязку (twoway) к ячейка с недопустимым (буквенно-цифровым) значением (которое на самом деле является строковым свойством, но валидатор проверяет целочисленное значение), но допустимым целочисленным значением является. (Как я уже говорил: графический интерфейс скорее терпимый, чем ограниченный, он должен дать пользователю подсказку и визуализировать, что введенное значение не соответствует требованиям, но даже это недопустимое значение должно быть принято.)
Может ли валидатор быть причиной ??
namespace ConfigTool.Tools
{
public class CycleValidationRule : ValidationRule
{
public override ValidationResult Validate(object value,
System.Globalization.CultureInfo cultureInfo)
{
//DataRowView dataRowView = (value as BindingGroup).Items[0] as DataRowView;
//string no = Convert.ToString(dataRowView.Row[0]);
if (int.TryParse(value.ToString(), out int i))
{
return new ValidationResult(true, null);
}
else
{
return new ValidationResult(false,
"Cycle should be an integer value.");
}
}
}
}