Я пытаюсь связать ObservableCollection элементов с ListPicker из инструментария Silverlight для Windows Phone. Я сделал это раньше, но в моем случае теперь мой ObservableCollection содержит элементы из пользовательского класса. Я не знаю, как получить каждое из свойств класса (для каждого элемента) для привязки к моему элементу ListPicker. Для того, чтобы лучше проиллюстрировать то, что у меня есть выглядит следующим образом:Как связать ObservableCollection с Listpicker
MainPage.xaml
<Grid.Resources>
<DataTemplate x:Name="SearchProviderItemTemplate">
<StackPanel Orientation="Horizontal">
<Image Source="{Binding Favicon}" />
<TextBlock Text="{Binding Name}" Margin="12,0,0,0"/>
</StackPanel>
</DataTemplate>
<DataTemplate x:Name="SearchProviderFullModeItemTemplate">
<StackPanel Orientation="Horizontal">
<Image Source="{Binding Favicon}" />
<TextBlock Text="{Binding Name}" Margin="12,0,0,0"/>
</StackPanel>
</DataTemplate>
</Grid.Resources>
<toolkit:ListPicker x:Name="SearchProviderListPicker" ItemsSource="{Binding SearchProvider}" Margin="12,0,12,0"
Header="Search provider" ItemTemplate="{Binding SearchProviderItemTemplate}"
FullModeHeader="Search provider" FullModeItemTemplate="{Binding SearchProviderFullModeItemTemplate}"
SelectedIndex="{Binding}"
SelectionChanged="SearchProviderListPicker_SelectionChanged"
CacheMode="BitmapCache"/>
MainPage.xaml.cs
public MainPage()
{
InitializeComponent();
//This data is placed here for convenience right now
ListItem Bing = new ListItem { Favicon = "", Name = "Bing", Address = "http://www.bing.com/search?q=" };
ListItem Google = new ListItem { Favicon = "", Name = "Google", Address = "http://www.google.com/search?q=" };
ListItem Yahoo = new ListItem { Favicon = "", Name = "Yahoo", Address = "http://search.yahoo.com/search?p=" };
ListItem Ask = new ListItem { Favicon = "", Name = "Ask", Address = "http://www.ask.com/web?q=" };
ListItem Aol = new ListItem { Favicon = "", Name = "AOL", Address = "http://search.aol.com/search?q=" };
Settings.SearchProvider.Value.Add(Bing);
Settings.SearchProvider.Value.Add(Google);
Settings.SearchProvider.Value.Add(Yahoo);
Settings.SearchProvider.Value.Add(Ask);
Settings.SearchProvider.Value.Add(Aol);
// Set the data context of the SearchProviderListPicker control to the data
DataContext = App.ViewModel;
}
MainViewModel.cs
public ObservableCollection<ListItem> SearchProvider { get; private set; }
public MainViewModel()
{
SearchProvider = Settings.SearchProvider.Value;
}
Класс Настройки ссылки выше используется для хранения SearchProvider
ObservableCollection в изолированном хранилище.
Settings.cs
public static Setting<ObservableCollection<ListItem>> SearchProvider = new Setting<ObservableCollection<ListItem>>("SearchProvider", new ObservableCollection<ListItem>());
И класс настройки сохраняет и получает данные из изолированного хранилища. Кроме того, мой собственный класс ListItem демонстрирует свойства, которые мне нужно использовать.
ListItem.cs
public string Favicon
{
get;
set;
}
public string Name
{
get;
set;
}
public string Address
{
get;
set;
}
Так в основном каждый SearchProvider
ObservableCollection элемент содержит Favicon, Name, and Address
, что мне нужно использовать, и я только хочу, чтобы связать Favicon
и Name
к ListPicker. Моя проблема заключается в том, что ListPicker представляет 5 поисковых провайдеров, за исключением текста для каждого сообщения: Project1.Common.ListItem
, где находится класс ListItem в моей общей папке. Я не должен привязывать их правильно к виду, но я не знаю, как правильно это выполнить?
Спасибо за ваш быстрый ответ. Я попробовал ваше решение, но теперь ничего не отображается в ListPicker? – Matthew