и спасибо за поиск.Я пытаюсь расширить пример, который нашел здесь .Моя проблема заключается в следующем:
Список в примере содержит страны: у каждой страны есть имя, флаг, описание, столица и идентификатор.Я хотел бы использовать меню панели приложений, чтобы отсортировать список на странице по любому выбранному параметру.XAML будет выглядеть так:
<shell:ApplicationBar.MenuItems>
<shell:ApplicationBarMenuItem Text="sort by capital..." Click="SortCapital_Click"/>
<shell:ApplicationBarMenuItem Text="sort by ID..." Click="SortID_Click"/>
</shell:ApplicationBar.MenuItems>
Чтобы отделить различные сценарии сортировки по параметрам от порядка чтения из XML по умолчанию, мне пришлось создать несколько дополнительных переменных и перегрузок, ипереопределить событие OnNavigatedTo:
public interface ICountryRepository
{
IList<CountryData> GetCountryList(); // called by constructor
IList<CountryData> GetCountryList(string sortMode); // called when sort is clicked
CountryData GetCountryById(int id);
}
...
public class XmlCountryRepository : ICountryRepository
{
private static List<CountryData> countryList = null;
static XmlCountryRepository()
{
XDocument loadedData = XDocument.Load("CountriesXML.xml");
var data = from query in loadedData.Descendants("Country")
select new CountryData
{
Name = (string)query.Element("Name"),
Flag = (string)query.Element("Flag"),
Description = (string)query.Element("Description"),
Capital = (string)query.Element("Capital"),
ID = (int)query.Element("ID"),
};
countryList = data.ToList();
}
public IList<CountryData> GetCountryList()
{
return countryList;
}
public IList<CountryData> GetCountryList(string sortMode)
{
switch (sortMode)
{
case "capital": // Sort by capital
break;
case "ID": // Sort by ID
break;
}
return countryList;
}
и, наконец, в главном классе конструктор вызывает GetCountryList (), который считывает элементы в списке в порядкеуказано в исходном XML-файле.Моя текущая реализация использует обработчики щелчков в меню приложения, чтобы установить флаги и снова перейти на страницу, но должен быть лучший способ сделать это!
private void SortID_Click(object sender, System.EventArgs e)
{
sortMode = "ID";
sortModeChanged = true;
NavigationService.Navigate(new Uri("List.xaml", UriKind.Relative));
}
protected override void OnNavigatedTo(System.Windows.Navigation.NavigationEventArgs e)
{
base.OnNavigatedTo(e);
if (sortModeChanged)
{
ICountryRepository countryRepository = new XmlCountryRepository();
this.list.ItemsSource = countryRepository.GetCountryList(sortMode);
sortModeChanged = false;
}
}
Я попытался посмотреть на Пример сортировки в MSDN , но я не мог понять, как расширить его на несколько параметров разных типов (int, string и т. д.)