我在(WPF Toolkit)DataGrid中遇到了性能问题.它包含大约1.000行(只有8列),滚动速度非常慢且滞后.此外,包含DataGrid的Window的初始加载需要5-10秒.
我做了一些研究(使用谷歌和StackOverflow)但除了打开UI虚拟化的建议之外找不到任何东西.但即使在明确表示滚动仍然非常缓慢之后.
我的DataGrid绑定到ICollectionView/CollectionViewSource.它是在XAML中定义的(列是明确定义的,不是自动生成的):
<tk:DataGrid x:Name="dataGrid"
ItemsSource="{Binding Path=Bookings}"
AutoGenerateColumns="False"
Grid.Row="1"
EnableRowVirtualization="True"
EnableColumnVirtualization="True"
VirtualizingStackPanel.IsVirtualizing="True"
VirtualizingStackPanel.VirtualizationMode="Recycling">
...
</tk:DataGrid>
Run Code Online (Sandbox Code Playgroud)
整个Window的DataContext设置为包含DataGrid绑定的ICollectionView的类的实例.
我发现的每篇博客或论坛帖子都赞扬了DataGrid的表现,所以我显然做了一些严重的错误.由于我对WPF很新,特别是对于DataGrid,我不知道如何改进它.有人对我有什么建议吗?您对DataGrid的体验如何?我究竟做错了什么?
编辑:只需按照此问题的建议将所有列的宽度设置为"自动".这并没有改变糟糕的滚动性能.另外,我没有使用DataGridTemplateColumns(只是一些DataGridTextColumns和两个DataGridComboBoxColumns).
Edit2:我用Snoop查看我的应用程序.我所看到的表明虚拟化确实在起作用(只有19行,而不是一千行).但每行包含52个元素,因此这些元素总计超过千个元素.可能是一个问题?
非常感谢!
我的WinForm调用一个执行一些复制操作的类.我想在表格上展示这方面的进展.
我想使用Backgroundworker,但我不知道如何报告从课程到表单的进度(/ backgroundworker)
在早期版本(Roslyn CTP)中,我使用以下代码来格式化我生成的代码,它工作得很好:
SyntaxNode.Format(FormattingOptions.GetDefaultOptions()).GetFormattedRoot()
Run Code Online (Sandbox Code Playgroud)
使用新的Roslyn版本它不再具有,那么新版本(SDK预览版)中上述代码的等价物是什么?
这就是我今天所拥有的:
modelBuilder.Entity<User>()
.HasOptional(p => p.DealDevice)
.WithRequired(c => c.User)
.WillCascadeOnDelete(false);
Run Code Online (Sandbox Code Playgroud)
DealDevice如果用户被删除,我想要删除相关的行,这样我就可以删除用户并让所有相关信息消失.
我可以改变WillCascadeOnDelete(false)到WillCascadeOnDelete(true)或将是删除用户如果交易被删除?
我首先要掌握EF代码.当我在代码中调用它时,我的域模型设计似乎不支持对象的自动"填充"子项.
模型:
public class Car
{
[Key,DatabaseGenerated(DatabaseGeneratedOption.Identity)]
public int Id { get; set; }
[Required,MaxLength(10)]
public string Registration { get; set; }
[MaxLength(30)]
public string Make { get; set; }
[MaxLength(45)]
public string Model { get; set; }
[Required]
public Coordinates Coordinates { get; set; }
[Required]
public Client Client { get; set; }
}
public class Coordinates
{
[Key, ForeignKey("Car")]
public int Id { get; set; }
public double Latitude { get; set; }
public double Longitude { get; …Run Code Online (Sandbox Code Playgroud) 我有一个刷子,用于为标题的背景着色.我喜欢画笔的外观,但希望它在底部三分之一处淡出透明.任何想法如何做到这一点?
<LinearGradientBrush
x:Key="HeaderBackgroundBrush"
EndPoint=".5,1"
StartPoint="1,0">
<GradientStop Color="#006699" Offset="1"/>
<GradientStop Color="#80A8CC" Offset="0.5"/>
</LinearGradientBrush>
Run Code Online (Sandbox Code Playgroud) 我有一个NancyContext,我需要Response根据请求的正确内容协商者获得一个正文.我想我可以使用Nancy的Negotiator类来添加模型,设置状态和其他东西.但是,我需要返回一个子类型Response.那么,我可以使用什么来构建响应Negotiator?
这是我的方法:
public Response ConvertToHttpResponse(Exception exception, NancyContext context)
{
var negotiator = new Negotiator(context)
.WithStatusCode(HttpStatusCode.BadRequest)
.WithReasonPhrase(exception.Message);
return ???;
}
Run Code Online (Sandbox Code Playgroud) 将js Date对象传递给我的ASP.NET Web Api控制器时,我总是得到null.我试过传递字符串,字符串数组,时间跨度 - 所有这些工作,除了日期.检查请求时,日期传递如下:
date:"2014-03-13T15:00:00.000Z"
Run Code Online (Sandbox Code Playgroud)
角度:
$http({
method: 'get',
url: 'api/stuff',
params: {
date: new Date()
}
);
Run Code Online (Sandbox Code Playgroud)
在我的ApiController中:
public IEnumerable<StuffResponse> Get(
[FromUri] DateTime? date
){ ... }
Run Code Online (Sandbox Code Playgroud)
通过日期的正确方法是什么?
我正在使用SymbolFinder来在我的解决方案中查找对某个类型的所有引用,如下所示:
ISymbol typeOfInterest = compilation.GetTypeByMetadataName(
"System.Reflection.PropertyInfo");
var references = SymbolFinder.FindReferencesAsync(typeOfInterest, solution).Result;
foreach (var reference in references)
{
// reference.Locations => symbol?
}
Run Code Online (Sandbox Code Playgroud)
这部分工作正常,SymbolFinder返回正确ReferenceLocations(手动检查)。我实际上对这些位置的符号感兴趣,以获取有关引用的更多(语义)信息,因此我可以对其进行过滤/使用它(例如,仅适用于属性)。
人们似乎对罗斯林很少公开信息却和我找不到任何工作与结果SymbolFinder的SDK预览的样本英寸 所以这是我的问题:是否有可能获得对应于 a 的符号ReferenceLocation?如何?
我想为我的数据库实现 B 树索引。
我读了很多数据结构和算法书籍来学习如何做。所有实现都使用数组来保存数据和子索引。
现在我想知道:B树节点中的链表优于数组吗?我想过一些想法:
分割节点时,复制操作将比数组更快。
插入数据时,如果将数据插入到数组的中间或头部,速度会比插入到链表低。