Связывание исключений замедляет ListView - PullRequest
1 голос
/ 06 июня 2011

Я связал WPF ListView со списком статей, и у меня есть такая привязка для определенного столбца:

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

Проблема в том, что в некоторых статьях нет элемента ArticleSupplier,поэтому он генерирует исключение «невидимой» привязки (в выходных данных отладчика).Это не влияет на само моё программное обеспечение, но действительно замедляет скорость прокрутки моего ListView, у меня есть около 15000 элементов.Если удалить эту привязку столбца, все снова будет гладким.

Как можно избежать этих исключений, чтобы замедлить мою ListView?

Ответы [ 4 ]

1 голос
/ 06 июня 2011

Исключения медленные в .NET .Вы должны избегать их в этом случае.Вместо того, чтобы пытаться получить доступ к возможно пустому списку, вам нужно извлечь правильное значение или ноль, не выдавая исключение:

public string FirstSupplierReference {
    get {
        var firstSupplier = ArticleSupplier.FirstOrDefault();
        return firstSupplier != null
            ? firstSupplier.reference
            : null;
    }
}

Конечно, вы должны отправлять уведомления PropertyChanged каждый раз ArticleSupplier [0] илиизменение его ссылки.

1 голос
/ 06 июня 2011

Привязка к другому свойству выполняется следующим образом:

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
      } 
}
1 голос
/ 06 июня 2011

Попробуйте установить запасное значение .

0 голосов
/ 06 июня 2011

Я обнаружил, что существует значительная разница в скорости с исключениями привязки, когда отладчик подключен (то есть намного, намного медленнее). Вы пытались запустить его без подключенного отладчика?

Очевидно, лучше, если вы сможете полностью избежать исключений, но подумал, что я добавлю 2p ...

...