2012-09-20 68 views
0

我正在着手将ObservableCollection的项目绑定到Windows Phone的Silverlight工具包中的ListPicker。我之前做过这些,但现在我的情况是,我的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,而我只需要绑定的FaviconName到ListPicker。我的问题是,ListPicker提供了5个搜索提供程序,除了每个文本的Project1.Common.ListItem,其中ListItem类位于我的Common文件夹中。我不能将这些视图正确地绑定到视图上,但我不知道如何正确完成此操作?

回答

0

你ListPicker的模板是Grid.Resources

定义的静态资源,因此,你必须改变像这样

ItemTemplate="{Binding SearchProviderItemTemplate}" 
FullModeItemTemplate="{Binding SearchProviderFullModeItemTemplate}" 

的ListPicker XAML代码替换上述两个属性以下

ItemTemplate="{StaticResource SearchProviderItemTemplate}" 
FullModeItemTemplate="{StaticResource SearchProviderFullModeItemTemplate}" 
+0

感谢您的快速反应。我试过你的解决方案,但现在没有什么显示在ListPicker上呢? – Matthew

0

如果您将'Project1.Common.ListItem'作为文本,表示您的绑定正确但您的模板存在问题。

第一次更正如上所述,当您引用模板时,您需要使用“StaticResource”而不是“Binding”。

请重新检查你的模板,为任何错别字等

如果我是你,我先试试,使其不使用设置类的工作,看看是否有帮助

相关问题