且构网

分享程序员开发的那些事...
且构网 - 分享程序员编程开发的那些事

WPF Datagrid - 如何验证多行并标记所有无效的?

更新时间:2023-12-04 13:10:04

如果您删除x:Key =RowStyle,那会发生什么?


$ b $原谅我,如果我是明显的,但没有看到你的其余的代码,我不能告诉。如果你正在命名一个风格,它将不会被使用,除非你明确地设置它被使用。

I have a datagrid with rows where the validation depends on his siblings. So far I'm using BindingGroups and a custom ValidationRule to validate multiple rows a the same time. But I can't figure out how to change the appereance of the invalid row entries. I return a ValidationResult and my grid gets a red border but my style gets ignored.

My xaml style code so far:

    <Style TargetType="{x:Type dg:DataGridRow}">
            <Style.Triggers>
                <Trigger Property="Validation.HasError" Value="true">
                    <Setter Property="BorderThickness" Value="10"/>
                    <Setter Property="BorderBrush" Value="Green"/>
                    <Setter Property="Background" Value="#F6B39E"/>
                    <Setter Property="ToolTip" Value="{Binding RelativeSource={RelativeSource Self}, Path=(Validation.Errors)[0].ErrorContent}"/>
                </Trigger>
            </Style.Triggers>
        </Style>

edit: maybe I should post a little more of my code at the moment I have this validation declaration:

 <dg:DataGrid.RowValidationRules>
      <viewModel:StreamGridValidationRules />
 </dg:DataGrid.RowValidationRules>

With this code my style above gets set correctly, but only one row gets validated at a time. As I need to validate all siblings and his parent aswell, I changed my code to this:

<dg:DataGrid.BindingGroup>
     <BindingGroup Name="BindingGroup">
         <BindingGroup.ValidationRules>
              <viewModel:StreamGridValidationRules />
          </BindingGroup.ValidationRules>
     </BindingGroup>
</dg:DataGrid.BindingGroup>

With this I get multiple items in the BindingGroup but my style gets ignored completly and the grid just gets the standard 1px red border.

Thanks beforehand for any tips and hints!

tS!

what happens if you remove the x:Key="RowStyle", does it work then?

forgive me if im being obvious, but not seeing the rest of your code, i cant tell. If you are naming a style it wont get used unless you are explicitly setting it to be used.