2012-04-13 1 views
6

Я разрабатываю для Windows 8 WinRT фреймворк. Следующий пример кода генерирует исключение:Настройка ItemsSource из производного списка ListBox «Катастрофический сбой»

Catastrophic failure (Exception from HRESULT: 0x8000FFFF (E_UNEXPECTED))

Является ли это еще одна ошибка в нынешних рамках WinRT (я использую VS11 и Consumer Preview)? У кого-то есть идея, как решить эту проблему?

Btw: Я тестировал тот же код с Windows Phone 7.5 Silverlight и он работает без проблем ...

Спасибо за вашу помощь.

public class MyListBox : ListBox 
{ 

} 

public sealed partial class BlankPage : Page 
{ 
    public BlankPage() 
    { 
     this.InitializeComponent(); 
    } 

    protected override void OnNavigatedTo(NavigationEventArgs e) 
    { 
     var box1 = new ListBox(); 
     box1.ItemsSource = new List<Object> { new Object() }; // works without problems 
     Content = box1; 

     var box2 = new MyListBox(); 
     box2.ItemsSource = new List<Object> { new Object() }; // throws exception 
     Content = box2; 
    } 
} 
+2

Я вполне уверен, что это [известная ошибка в Windows 8 Consumer Preview] (http: //social.msdn .microsoft.com/Форум/EN-US/winappswithcsharp/резьба/295d7ee6-8bc4-4326-9ea7-b68ee4c98a7a). –

+0

Ах, отчет об ошибках COM вернулся! –

+0

Вы нашли какие-нибудь обходные пути? – notacat

ответ

2

У меня возникла аналогичная проблема при подклассификации ListView. В моем случае следующий подход частично помогло: я перестал пытаться установить ItemsSource мой ListView непосредственно в коде позади, но вместо этого я создал CollectionViewSource в XAML как:

<UserControl.Resources> 
    <CollectionViewSource x:Name="myCollectionViewSource"/> 
</UserControl.Resources> 
... 
... 
<ListView 
    ... 
    ItemsSource="{Binding Source={StaticResource myCollectionViewSource}}" /> 

А в коде позади Я поставил

this.myCollectionViewSource.Source = new List<Object> { new Object() }; // The real data source respectively 

Однако это только откладывает проблему. По крайней мере, в моем случае. В моем реальном примере я использую ObservableVector как источник данных. И как только выполняется любое изменение коллекции ObservableVector (например, Clear), я также испытываю Катастрофический сбой (0x8000FFFF). Как только я использую оригинальный ListView (а не мою подклассовую версию), все работает отлично снова - точно так же, как в вашем случае. Поэтому мой ответ не может быть понят как решение проблемы, но, возможно, это намек, который стоит попробовать. В моем случае оригинальное назначение работает нормально, проблемы возникают сначала после того, как наблюдаемая коллекция пытается обновить. Я экспериментировал с ObservableCollection (должен работать в CP, это не в DP), но там я столкнулся с другими проблемами. Было бы интересно узнать, удалось ли вам добиться каких-либо успехов на этом пути ...

+0

Да, у меня также были проблемы при вызове событий «PropertyChanged» или «CollectionChanged» ... В настоящий момент я перестал работать над моим проектом (или этой конкретной проблемой), и я ожидая проведения RC, который должен быть доступен в июне. У меня также было много других проблем (свойство зависимости типа DateTime/struct не работает, приложения работают только в симуляторе - сбои сеанса в противном случае, vs сбой при открытии xaml-файлов, Popup-класс убивает привязки в содержащихся элемента управления, ...) у меня есть время для создания обходных решений для всего этого ... :) В любом случае, спасибо за ваш ответ. Может быть, я дам ему выстрел –

+0

Я понимаю. Это довольно неприятно. Я колеблюсь. Однако в прошлый раз я возлагал надежды на переключатель DP-> CP, и он не волшебно решал самые острые проблемы - мне все еще приходилось создавать обходные пути - только разные). Надеемся, что опыт RC действительно будет намного более плавным. –

+0

Действительно DP-> CP решил множество проблем (несколько NotifyPropertyChanged/ObservableCollection/Vector mess) ... –