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
InformationsquelleAutor Pietro | 2013-10-13
Schreibe einen Kommentar