Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/292.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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/wpf/13.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数据网格虚拟化丢失单元布局_C#_Wpf_Datagrid_Wpfdatagrid_Virtualization - Fatal编程技术网

C# WPF数据网格虚拟化丢失单元布局

C# WPF数据网格虚拟化丢失单元布局,c#,wpf,datagrid,wpfdatagrid,virtualization,C#,Wpf,Datagrid,Wpfdatagrid,Virtualization,我有一个自定义样式的datagrid,只有两列。第二列是“DataGridTemplateColumn”,其中的网格还包含一个自定义样式的文本框和一个图像。我在文本框中创建了一个“IsValid”依赖属性,它根据绑定对象的属性值更改其背景颜色和边框笔刷。图像通过DataTrigger根据对象的IsValid属性更改其源 每次用户按下enter键并将对象中的IsValid属性设置为true、false或null时,textbox基本上都会做一些工作(当然,通过对象中的notifypropertyc

我有一个自定义样式的datagrid,只有两列。第二列是“DataGridTemplateColumn”,其中的网格还包含一个自定义样式的文本框和一个图像。我在文本框中创建了一个“IsValid”依赖属性,它根据绑定对象的属性值更改其背景颜色和边框笔刷。图像通过DataTrigger根据对象的IsValid属性更改其源

每次用户按下enter键并将对象中的IsValid属性设置为true、false或null时,textbox基本上都会做一些工作(当然,通过对象中的notifypropertychanged,更改会反映在textbox和图像上)

现在我的问题是:如果禁用RowVirtualization,当datagrid中显示很多行时(大约在100到1000之间),垂直滚动会非常慢,但如果我保持打开状态,生成的新行的背景颜色会错误,旧行的布局会丢失

这是DataGrid的xaml

<DataGrid x:Name="dgData"
          AutoGenerateColumns="False"
          Margin="2"
          IsReadOnly="False"
          ItemsSource="{Binding}"
          SelectionMode="Single"
          CanUserAddRows="False"
          CanUserReorderColumns="False"
          CanUserResizeRows="False"
          Style="{StaticResource dDataGrid2}"
          ScrollViewer.VerticalScrollBarVisibility="Visible"
          ScrollViewer.HorizontalScrollBarVisibility="Disabled"
          MaxHeight="750"
          EnableRowVirtualization="False"
          SelectionChanged="dgData_SelectionChanged"
          Loaded="dgData_Loaded">

  <DataGrid.RowStyle>
    <Style TargetType="{x:Type DataGridRow}"
           BasedOn="{StaticResource dDataGridRow}">
      <EventSetter Event="PreviewMouseLeftButtonUp"
                   Handler="Row_Click" />
    </Style>
  </DataGrid.RowStyle>

  <DataGrid.Columns>
    <DataGridTextColumn Header="{Binding Source={x:Static fields:FieldNameList.ProductCode}}"
                        Binding="{Binding Path=ProductCode}"
                        Width="auto"
                        MinWidth="160"
                        IsReadOnly="True" />
    <DataGridTextColumn Header="{Binding Source={x:Static fields:FieldNameList.Product}}"
                        Binding="{Binding Path=ProductDescription}"
                        Width="*"
                        IsReadOnly="True" />

    <DataGridTemplateColumn Header="Código SNC"
                            Width="120">
      <DataGridTemplateColumn.CellTemplate>
        <DataTemplate>
          <Grid Name="gridSNCCode">
            <Grid.ColumnDefinitions>
              <ColumnDefinition />
              <ColumnDefinition Width="auto" />
            </Grid.ColumnDefinitions>


            <txt:DTextBox Grid.Column="0"
                          x:Name="txtSNCCode"
                          PreviewKeyUp="txtSNCCode_PreviewKeyUp"
                          TextChanged="DTextBox_TextChanged"
                          Text="{Binding Path=PHC_CPOC, UpdateSourceTrigger=PropertyChanged, Mode=TwoWay}"
                          IsValid="{Binding Path=IsPHC_CPOC_Valid, UpdateSourceTrigger=PropertyChanged, Mode=TwoWay}"
                          NumericOnly="True"
                          SelectAllOnFocus="true" />
            <Image Grid.Column="1"
                   Name="imgValidation"
                   Width="16"
                   HorizontalAlignment="Center"
                   VerticalAlignment="Center"
                   Margin="3 0" />
          </Grid>
          <DataTemplate.Triggers>
            <DataTrigger Binding="{Binding Path=IsPHC_CPOC_Valid, UpdateSourceTrigger=PropertyChanged, Mode=OneWay}"
                         Value="{x:Null}">
              <Setter TargetName="imgValidation"
                      Property="Visibility"
                      Value="Collapsed" />
              <Setter TargetName="imgValidation"
                      Property="Source"
                      Value="{x:Null}" />
              <Setter TargetName="gridSNCCode"
                      Property="ToolTip"
                      Value="" />
            </DataTrigger>

            <DataTrigger Binding="{Binding Path=IsPHC_CPOC_Valid, UpdateSourceTrigger=PropertyChanged, Mode=OneWay}"
                         Value="True">
              <Setter TargetName="imgValidation"
                      Property="Visibility"
                      Value="Visible" />
              <Setter TargetName="imgValidation"
                      Property="Source"
                      Value="pack://application:,,,/SAFT2PHC;component/Resources/Images/Success48.png" />
              <Setter TargetName="gridSNCCode"
                      Property="ToolTip"
                      Value="Código SNC Válido" />
            </DataTrigger>

            <DataTrigger Binding="{Binding Path=IsPHC_CPOC_Valid, UpdateSourceTrigger=PropertyChanged, Mode=OneWay}"
                         Value="False">
              <Setter TargetName="imgValidation"
                      Property="Visibility"
                      Value="Visible" />
              <Setter TargetName="imgValidation"
                      Property="Source"
                      Value="pack://application:,,,/SAFT2PHC;component/Resources/Images/delete2-48.png" />
              <Setter TargetName="gridSNCCode"
                      Property="ToolTip"
                      Value="Código SNC Inválido" />
            </DataTrigger>
          </DataTemplate.Triggers>
        </DataTemplate>
      </DataGridTemplateColumn.CellTemplate>
    </DataGridTemplateColumn>
  </DataGrid.Columns>
</DataGrid>

这是c代码

publicobservableCollections产品{get;set;}
公共MyWindow(列出产品)
{
初始化组件();
此。产品=新的可观察收集(产品);
this.dgddata.ItemsSource=this.Products;
}
如何获得良好的DataGrid性能,同时又不丢失单元格更新布局

我试过使用Items.Refresh()但不起作用


谢谢

我冒昧地重新格式化了您的XAML,将每个属性放在一个新行上。需要的水平滚动量太大了。谢谢。。。没有注意到,它确实变得更容易阅读
public ObservableCollections<ProductObj> Products { get; set; }

public MyWindow(List<ProductObj> products)
{
    InitializeComponent();
    this.Products = new ObservableCollection(products);
    this.dgData.ItemsSource = this.Products;
}