Перемещение коллекций Pivotviewer из Silverlight 4 в Silverlight 5
Я просто играю с элементом управления 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 ответ
Решение
Что происходит, так это _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;
}
}