WPF DataGrid在滚动时重置某些复选框

时间:2017-01-11 22:48:10

标签: c# wpf checkbox datagrid

我有一个带有数据网格的C#WPF应用程序。我有一个自定义类,其中包含一些公共布尔属性,每个属性都有一个get和set。

 public class OutlookPST
{
    public FileInfo PSTFileInfo { get; set; }   

    public Boolean Attached { get; set; }
    public Boolean FileLocal { get; set; }
    public Boolean LatestVersion { get; set; }
    public Boolean BackupExists { get; set; }
    public Boolean IgnoreDuplicate { get; set; }

    public Boolean CopyToLocalFlag { get; set; }
    public Boolean BackupToNetworkFlag { get; set; }  

在xaml文件中,我有itemsource =“Binding”。

<DataGrid x:Name="dgPSTs" VirtualizingStackPanel.VirtualizationMode="Standard" VirtualizingStackPanel.IsVirtualizing="True" ItemsSource="{Binding}"  HorizontalAlignment="Left" Margin="10,121,0,0" VerticalAlignment="Top" Height="243" Width="1193"/>

我正在将datagrid ItemsSource属性设置为此自定义类的列表。

private void OutlookPSTToDatagrid(List<OutlookPST> PSTs)
    {
        try
        {   
            dgPSTs.ItemsSource = PSTs;

当我这样做时,所有初始数据看起来都很好。所有布尔标志都是复选框,这就是我想要的。所有数据都是正确的。当我向下滚动时,只有两个布尔标志被设置为选中。当我向上滚动时,第一行也会被检查,而不是之前。

我不明白它是如何为一些旗帜工作而不是其他旗帜。

有人有什么想法吗?如果需要,我可以发布一些代码。只是让我知道代码的哪些部分。

谢谢!

1 个答案:

答案 0 :(得分:0)

原来,罪魁祸首是代码中其他地方出现了一对不正确形成的lambda表达式:

if (outlookPSTs.Where(x => x.CopyToLocalFlag = true).Count() > 0)

而不是:

if (outlookPSTs.Where(x => x.CopyToLocalFlag == true).Count() > 0)

另一个布尔标志也是如此。