绑定异常会降低ListView的速度

时间:2011-06-06 11:40:56

标签: wpf exception data-binding listview

我已将WPF ListView绑定到文章列表中,并且我对某个列有这种绑定:

DisplayMemberBinding="{Binding Path=ArticleSupplier[0].reference, Mode=OneWay}"

问题是某些文章没有ArticleSupplier项,因此它会抛出一个“不可见”的绑定异常(在调试器输出中)。它不会影响我的软件本身,但它确实会降低我ListView的滚动速度,我有大约15000个项目。如果我删除此列绑定,则所有内容都会再次平滑。

如何避免这些例外以减慢我的ListView

4 个答案:

答案 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 ......