C# WPF-MVVM:Datagrid验证,工具提示wrih错误消息don';行不通
我通过验证规则在datagrid单元上实现验证 我在单元格编辑中得到了验证,但无法显示带有错误消息的工具提示。当单元格值超出范围时,我会看到错误图标,但不会看到错误消息工具提示 这是XAML代码: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
<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>