Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/259.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# WPF-MVVM:Datagrid验证,工具提示wrih错误消息don';行不通_C#_Wpf_Validation_Mvvm_Datagrid - Fatal编程技术网

C# WPF-MVVM:Datagrid验证,工具提示wrih错误消息don';行不通

C# WPF-MVVM:Datagrid验证,工具提示wrih错误消息don';行不通,c#,wpf,validation,mvvm,datagrid,C#,Wpf,Validation,Mvvm,Datagrid,我通过验证规则在datagrid单元上实现验证 我在单元格编辑中得到了验证,但无法显示带有错误消息的工具提示。当单元格值超出范围时,我会看到错误图标,但不会看到错误消息工具提示 这是XAML代码: <UserControl.Resources> <local:DatagridViewModel x:Key="ViewModel"/> <CollectionViewSource x:Key="cvsEntries" Source="{Binding L

我通过验证规则在datagrid单元上实现验证

我在单元格编辑中得到了验证,但无法显示带有错误消息的工具提示。当单元格值超出范围时,我会看到错误图标,但不会看到错误消息工具提示

这是XAML代码:

<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> 

感谢您提供有关此问题的任何线索。

从验证中获取错误消息如下所示:

<Style x:Key="textBoxInError" TargetType="{x:Type TextBox}">
  <Style.Triggers>
    <Trigger Property="Validation.HasError" Value="true">
      <Setter Property="ToolTip"
        Value="{Binding RelativeSource={x:Static RelativeSource.Self},
                        Path=(Validation.Errors)[0].ErrorContent}"/>
    </Trigger>
  </Style.Triggers>
</Style>


尝试一下,让我们知道它是否有效。:)

对于有效结果,您应该返回
ValidationResult.ValidResult
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);
      }
    }
<Style x:Key="textBoxInError" TargetType="{x:Type TextBox}">
  <Style.Triggers>
    <Trigger Property="Validation.HasError" Value="true">
      <Setter Property="ToolTip"
        Value="{Binding RelativeSource={x:Static RelativeSource.Self},
                        Path=(Validation.Errors)[0].ErrorContent}"/>
    </Trigger>
  </Style.Triggers>
</Style>