Перемещение коллекций Pivotviewer из Silverlight 4 в Silverlight 5 - PullRequest
1 голос
/ 29 марта 2012

Я просто играю с элементом управления PivotViewer в Silverlight 5. Кажется, что многие вещи улучшились, но у меня возникают некоторые проблемы с отображением моих старых коллекций .cxml, которые отлично работали в Silverlight 4

Старый способ кодирования:

InitializeComponent();
MainPivotViewer.LoadCollection("http://localhost:4573/ClientBin/Actresses.cxml",              string.Empty);

теперь переводится в нечто вроде:

InitializeComponent();
CxmlCollectionSource _cxml = new CxmlCollectionSource(new Uri("http://localhost:1541/ClientBin/Actresses.cxml", UriKind.Absolute));
PivotMainPage.PivotProperties = _cxml.ItemProperties.ToList();
PivotMainPage.ItemTemplates = _cxml.ItemTemplates;
PivotMainPage.ItemsSource = _cxml.Items;

Что происходит, когда элементы отображаются, но на панели фильтра ничего не отображается, и, если элемент выбран, для него больше нет описания!

1 Ответ

2 голосов
/ 29 марта 2012

Происходит следующее: _cxml.ItemsProperties не загружается до тех пор, пока CxmlCollectionSource не загрузит и не обработает файл .cxml. CxmlCollectionSource имеет событие StateChanged. Если вы проверите, является ли State значением Loaded, тогда вы можете сопоставить свойства _cxml с PivotViewer.

Вот пример того, как это будет выглядеть:

        private CxmlCollectionSource _cxml;
    void pViewer_Loaded(object sender, RoutedEventArgs e)
    {
        _cxml = new CxmlCollectionSource(new Uri("http://myurl.com/test.cxml",
                                             UriKind.Absolute));
        _cxml.StateChanged += _cxml_StateChanged;
    }

    void _cxml_StateChanged(object sender,
                           CxmlCollectionStateChangedEventArgs e)
    {
        if(e.NewState == CxmlCollectionState.Loaded)
        {
            pViewer.PivotProperties =
                       _cxml.ItemProperties.ToList();
            pViewer.ItemTemplates =
                       _cxml.ItemTemplates;
            pViewer.ItemsSource =
                       _cxml.Items;
        }
    }

У меня есть более подробное описание этого в моем блоге .

...