我已将WPF ListView
绑定到文章列表中,并且我对某个列有这种绑定:
DisplayMemberBinding="{Binding Path=ArticleSupplier[0].reference, Mode=OneWay}"
问题是某些文章没有ArticleSupplier
项,因此它会抛出一个“不可见”的绑定异常(在调试器输出中)。它不会影响我的软件本身,但它确实会降低我ListView
的滚动速度,我有大约15000个项目。如果我删除此列绑定,则所有内容都会再次平滑。
如何避免这些例外以减慢我的ListView
?
答案 0 :(得分:1)
尝试设置fallback-value。
答案 1 :(得分:1)
Exceptions are slow in .NET。在这种情况下你必须避免它们。您不需要尝试访问可能为空的列表,而是需要提取正确的值,或者为null,而不会抛出异常:
public string FirstSupplierReference {
get {
var firstSupplier = ArticleSupplier.FirstOrDefault();
return firstSupplier != null
? firstSupplier.reference
: null;
}
}
当然,您必须在每次ArticleSupplier [0]或其引用更改时发送PropertyChanged通知。
答案 2 :(得分:1)
绑定到另一个属性如下:
DisplayMemberBinding="{Binding Path=FirstArticleSupplier.reference, Mode=OneWay}"
并且在DataContext类中具有FirstArticleSupplier的属性,如下所示:
public <your ArticleSupplier class> FirstArticleSupplier
{
get { if( ArticleSupplier.Count > 0)
return ArticleSupplier[0];
return new <your ArticleSupplier class>; //this will at least not know exception and return empty object instead
}
}
答案 3 :(得分:0)
我发现连接调试器时绑定异常存在显着的速度差异(即,更慢,更慢)。您是否尝试在未安装调试器的情况下运行它?
如果你能完全避免这些例外情况,显然会更好,但只是想我会投入我的2p ......