WPF - MVVM : Datagrid-Validierung, Tooltip wrih Fehlermeldung nicht funktionieren
Ich bin die Implementierung, die Validierung auf datagrid-Zellen durch Validierungsregeln.
Bekomme ich die Validierung arbeitet auf der Zelle Bearbeiten, aber keine Möglichkeit, um eine QuickInfo anzuzeigen mit der Fehlermeldung. Ich bekomme das Fehlersymbol, wenn die Zelle Wert liegt außerhalb des Bereichs, aber nicht die Fehlermeldung tooltip.
Dies ist der XAML-code:
<UserControl.Resources>
<local:DatagridViewModel x:Key="ViewModel"/>
<CollectionViewSource x:Key="cvsEntries" Source="{Binding LineItems, Source={StaticResource ViewModel}}"/>
<Style TargetType="{x:Type DataGridRow}">
<Setter Property="ValidationErrorTemplate">
<Setter.Value>
<ControlTemplate>
<Image Source="../Images/error.png" ToolTip="{Binding RelativeSource={RelativeSource Self}, Path=(Validation.Errors).CurrentItem}" Margin="0" Width="15" Height="15" />
</ControlTemplate>
</Setter.Value>
</Setter>
</Style>
</UserControl.Resources>
<DataGrid x:Name="lineItemGrid" Grid.ColumnSpan="5" Grid.Row="13" Background="#FFD6E9F5" ItemsSource="{Binding Source={StaticResource cvsEntries}}" AutoGenerateColumns="False" CanUserDeleteRows="False" VerticalContentAlignment="Stretch" Margin="0,4,0,0" SelectionMode="Single" SelectedItem="{Binding SelectedLineItem}">
<DataGrid.Resources>
<SolidColorBrush x:Key="DataGridDeployedTextForeground" Color="#FF409540"/>
<SolidColorBrush x:Key="DataGridObsoleteTextForeground" Color="#FF934440"/>
<SolidColorBrush x:Key="DataGridDraftTextForeground" Color="#FF654093"/>
</DataGrid.Resources>
<DataGrid.Columns>
<DataGridTextColumn Binding="{Binding Product, Mode=OneWay}" Header="Product" IsReadOnly="True"/>
<DataGridTextColumn Binding="{Binding State, Mode=OneWay}" Header="State" SortMemberPath="State" IsReadOnly="True"/>
<DataGridTextColumn Header="Cust.Opt">
<DataGridTextColumn.Binding>
<Binding Path="CustomAttributeValue" UpdateSourceTrigger="PropertyChanged">
<Binding.ValidationRules>
<local:PropertyValidation>
<local:PropertyValidation.ValidValue>
<local:ValueChecker
Minimum="{Binding Path=CustomAttributeMinValue, Source={StaticResource cvsEntries}}"
Maximum="{Binding Path=CustomAttributeMaxValue, Source={StaticResource cvsEntries}}"/>
</local:PropertyValidation.ValidValue>
</local:PropertyValidation>
</Binding.ValidationRules>
</Binding>
</DataGridTextColumn.Binding>
</DataGridTextColumn>
</DataGrid.Columns>
</DataGrid>
ist und diese Validierung code:
public override ValidationResult Validate(object value, CultureInfo cultureInfo)
{
var result = new ValidationResult(true, null);
var minValue = System.Convert.ToInt32(ValidValue.Minimum);
var maxValue = System.Convert.ToInt32(ValidValue.Maximum);
var valueToCheck = minValue;
Error = "Error!!!";
int.TryParse(value as string, out valueToCheck);
CanBeValidated = true;
if (minValue == -1 && maxValue == -1 && value == string.Empty)
{
value = null;
CanBeValidated = false;
}
if (CanBeValidated == true && (valueToCheck < minValue || valueToCheck > maxValue))
{
result = new ValidationResult(false, this.Error);
}
else
{
result = new ValidationResult(true, "OK");
}
return result;
}
}
und diese die angefügte Eigenschaften:
public class ValueChecker : DependencyObject
{
public static readonly DependencyProperty MinimumProperty = DependencyProperty.Register("Minimum", typeof(string), typeof(ValueChecker));
public string Minimum
{
get
{
return (string)GetValue(MinimumProperty);
}
set
{
SetValue(MinimumProperty, value);
}
}
public static readonly DependencyProperty MaximumProperty = DependencyProperty.Register("Maximum", typeof(string), typeof(ValueChecker));
public string Maximum
{
get
{
return (string)GetValue(MaximumProperty);
}
set
{
SetValue(MaximumProperty, value);
}
}
Vielen Dank für jeden Hinweis auf dieses Problem.
- Für ein gültiges Ergebnis sollten Sie wieder
ValidationResult.ValidResult
Du musst angemeldet sein, um einen Kommentar abzugeben.
Immer Fehler Meldung aus Validierung sieht wie folgt aus:
Probieren Sie es aus und lassen Sie uns wissen, ob es geklappt hat. 🙂