gpt4 book ai didi

c# - WPF DataGrid 正在添加额外的 "ghost"行

转载 作者:太空狗 更新时间:2023-10-29 21:34:52 25 4
gpt4 key购买 nike

嘿,

在我的应用程序中,我使用 DataGrid 来显示一些数据。为了让一切都与线程一起工作,我正在使用 AsyncObservableCollection作为 DataGrid 的 DataContext。当我的应用程序启动时,它会在某些文件夹中查找文件并更新 AsyncObservableCollection。查找文件在单独的线程上完成:

Task.Factory.StartNew(() => _cardType.InitAllOrdersCollection())
.ContinueWith((t) => ThrowEvent(), TaskContinuationOptions.None);

所有加载逻辑都在 InitAllOrdersCollection() 方法中。

现在事情变得糟糕了,当我出于某种原因启动应用程序时,我在 DataGrid 中得到 2 行具有相同数据,即使集合中只有一个项目并且文件夹中只有一个文件。如果我在加载文件之前添加延迟(Thread.Sleep() 最少 50 毫秒),则 DataGrid 会正确显示所有内容(没有额外的行)。延迟必须添加到正在加载文件的线程(使用 Task.Factory.StartNew() 创建的线程)。

有没有人遇到过类似的事情,或者还有什么我应该尝试的吗?提前致谢!

编辑:根据要求添加一些代码:

public AsyncObservableCollection<IGridItem> OrdersCollection = new AsyncObservableCollection<IGridItem>();

public void InitAllOrdersCollection()
{
// Thread.Sleep(50); <-- this sleep here fixes the problem!
foreach (var convention in FileNameConventions)
{
var namePatterns = convention.NameConvention.Split(',');
foreach (var pattern in namePatterns)
{
var validFiles = CardTypeExtensions.GetFiles(this.InputFolder, pattern, convention);
if (validFiles.Any())
{
this.FilesToOrders(validFiles, convention);
}
}
}
}

public static List<string> GetFiles(string inputFolder, string pattern, FileNameConvention convention)
{
var files = Directory.GetFiles(inputFolder, pattern);
return files.Where(file => IsCorrect(file, convention)).AsParallel().ToList();
}

// Adds new order to OrdersCollection if its not there already!
private void FilesToOrders(List<string> dirFiles, FileNameConvention convention)
{
foreach (var dirFile in dirFiles.AsParallel())
{
var order = new Order(dirFile, this, convention);

if (!this.OrdersCollection.ContainsOrder(order))
{
this.OrdersCollection.Add(order);
}
}
}

public static bool ContainsOrder(this ObservableCollection<IGridItem> collection, Order order)
{
return collection.Cast<Order>().Any(c=>c.Filepath == order.Filepath);
}

FilesToOrders() 方法是将新订单添加到 AsyncObservableCollection 的方法。希望这会有所帮助。

最佳答案

CanUserAddRows="False" 添加到您的 XAML 文件中

<DataGrid CanUserAddRows="False"../>

关于c# - WPF DataGrid 正在添加额外的 "ghost"行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13624289/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com