我试图选择一个特定的项目在ListPicker的WP7的selectionchanged事件。我相信我已经正确实现了ListPicker,并且已经将一个文本数组绑定到了ListPicker,但是当尝试在ListPicker中选择一个特定的项目时出现了我的问题。我的ListPicker在我的SettingsPage.xaml中,我想将特定的字符串传递给我的MainPage.xaml对象以供在那里使用。我的代码如下listpicker选择不起作用
SettingsPage.xaml
<phone:PhoneApplicationPage.Resources>
<DataTemplate x:Name="SearchProviderItemTemplate">
<TextBlock Text="{Binding SearchProvider}" />
</DataTemplate>
</phone:PhoneApplicationPage.Resources>
<!--Pivot Control-->
<controls:Pivot Title="QUEST">
<!--Pivot item one-->
<controls:PivotItem Header="browser">
<ScrollViewer x:Name="ContentPanel_Browser" Margin="12,0,12,0">
<Grid>
<Grid.ColumnDefinitions>
<ColumnDefinition/>
<ColumnDefinition/>
</Grid.ColumnDefinitions>
<Grid.RowDefinitions>
<RowDefinition Height="Auto"/>
<RowDefinition Height="70"/>
<RowDefinition Height="70"/>
<RowDefinition/>
<RowDefinition/>
<RowDefinition/>
</Grid.RowDefinitions>
...
<!-- Search Provider -->
<TextBlock Text="Search provider" Margin="12,7,12,8"
Grid.Row="3" VerticalAlignment="Bottom"
Foreground="{StaticResource PhoneSubtleBrush}"/>
<toolkit:ListPicker x:Name="SearchProviderListPicker" Grid.Row="4" Grid.ColumnSpan="2" Margin="12,0,12,0"
ItemTemplate="{Binding SearchProviderItemTemplate}"
SelectionChanged="SearchProviderListPicker_SelectionChanged" />
</Grid>
</ScrollViewer>
<!--<Grid/>-->
</controls:PivotItem>
SettingsPage.xaml.cs
string searchProvider;
String[] SearchProvider =
{
"Google",
"Bing",
"Yahoo",
"Ask",
"AOL"
};
private void SearchProviderListPicker_SelectionChanged(object sender, SelectionChangedEventArgs e)
{
if(e.AddedItems.Equals("Google"))
{
searchProvider = "http://www.google.com/search?q=";
}
else if(e.AddedItems.Equals("Bing"))
{
searchProvider = "http://www.bing.com/search?q=";
}
//if (SearchProvider.Equals("Google"))
//{
// searchProvider = "http://www.google.com/search?q=";
//}
//else if(SearchProvider.Equals("Bing"))
//{
// searchProvider = "http://www.bing.com/search?q=";
//}
}
public SettingsPage()
{
InitializeComponent();
this.SearchProviderListPicker.ItemsSource = SearchProvider;
}
protected override void OnNavigatedFrom(NavigationEventArgs e)
{
base.OnNavigatedFrom(e);
//Send searchProvider to MainPage.xaml
if (searchProvider != null)
{
//this.NavigationService.Navigate(new Uri("/MainPage.xaml?curProvider=" + searchProvider, UriKind.Relative));
NavigationContext.Equals("curProvider=" + searchProvider);
}
}
MainPage.xaml.cs中
string _searchProvider;
//OnNavigatedTo method
protected override void OnNavigatedTo(NavigationEventArgs e)
{
base.OnNavigatedTo(e);
//for Search Provider (from SettingsPage.xaml)
NavigationContext.QueryString.TryGetValue("curProvider", out _searchProvider);
}
private void SearchBar_Click(object sender, KeyEventArgs e)
{
string search;
string _search = SearchBar.Text;
search = HttpUtility.UrlEncode(_search);
//search whats in the searchbar
//use inputscope enter key to start search!
if (e.Key == Key.Enter)
{
//check to ensure absolute navigation uri, else search through bing?
if (String.IsNullOrEmpty(search))
return;
if (search.Equals("about:blank"))
return;
if (_searchProvider != null)
{
TheBrowser.Navigate(_searchProvider + search);
}
//Google
//TheBrowser.Navigate("http://www.google.com/search?q=" + search);
//Bing
//TheBrowser.Navigate("http://www.bing.com/search?q=" + search);
//Yahoo
//TheBrowser.Navigate("http://search.yahoo.com/search?p=" + search);
//Ask
//TheBrowser.Navigate("http://www.ask.com/web?q=" + search);
//AOL
//TheBrowser.Navigate("http://search.aol.com/search?q=" + search);
//lose focus of textbox while navigating
this.Focus();
}
}
基本上我想通过将选定的ListPicker项目添加到MainPage,以便它可以用作Web浏览器的默认搜索提供程序r控制。关于如何实现这一点的任何想法?任何代码的援助将不胜感激..我真的不确定如何完全正确地完成(截至目前,我没有任何调试或运行时错误,但webbrowser不尝试使用所选的ListPicker项目时搜索)?提前致谢!
'AddedItems'返回所选项目的列表。直接执行'Equals(“somestring”)'是行不通的。你会得到特定的项目对象,并尝试使用比较。 – abhinav 2012-03-12 07:45:07