文通过改变DataContext,让ListBox的Item绑定到不同的ObservableCollection。
首先,我们在页面上放一个ListBox,它的ItemsSource绑定设置为strs,
在页面上把一个Button,通过点击这个Button更改DataContext,
xaml代码如下:
后台代码中,我们声明默认绑定的ObservableCollection:ObservableCollection<string> strsCode:<phone:PhoneApplicationPage x:Class="HelloWP7.MainPage" xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" xmlns:phone="clr-namespace:Microsoft.Phone.Controls;assembly=Microsoft.Phone" xmlns:shell="clr-namespace:Microsoft.Phone.Shell;assembly=Microsoft.Phone" xmlns:d="http://schemas.microsoft.com/expression/blend/2008" xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006" mc:Ignorable="d" d:DesignWidth="480" d:DesignHeight="768" FontFamily="{StaticResource PhoneFontFamilyNormal}" FontSize="{StaticResource PhoneFontSizeNormal}" Foreground="{StaticResource PhoneForegroundBrush}" SupportedOrientations="Portrait" Orientation="Portrait" shell:SystemTray.IsVisible="True"> <!--LayoutRoot is the root grid where all page content is placed--> <Grid x:Name="LayoutRoot" Background="Transparent"> <Grid.RowDefinitions> <RowDefinition Height="Auto"/> <RowDefinition Height="*"/> </Grid.RowDefinitions> <!--TitlePanel contains the name of the application and page title--> <StackPanel x:Name="TitlePanel" Grid.Row="0" Margin="12,17,0,28"> <TextBlock x:Name="ApplicationTitle" Text="MY APPLICATION" Style="{StaticResource PhoneTextNormalStyle}"/> <TextBlock x:Name="PageTitle" Text="page name" Margin="9,-7,0,0" Style="{StaticResource PhoneTextTitle1Style}"/> </StackPanel> <!--ContentPanel - place additional content here--> <Grid x:Name="ContentPanel" Grid.Row="1" Margin="12,0,12,0"> <ListBox Grid.Column="2" Name="listBox1" ItemsSource="{Binding strs}"> <ListBox.ItemTemplate> <DataTemplate> <StackPanel Orientation="Horizontal"> <TextBlock Text="{Binding}" /> </StackPanel> </DataTemplate> </ListBox.ItemTemplate> <ItemsControl.ItemsPanel> <ItemsPanelTemplate> <StackPanel Orientation="Vertical" /> </ItemsPanelTemplate> </ItemsControl.ItemsPanel> </ListBox> <Button Content="Button" Height="72" HorizontalAlignment="Left" Margin="86,176,0,0" Name="button1" VerticalAlignment="Top" Width="160" Click="button1_Click"/> </Grid> </Grid> <!--Sample code showing usage of ApplicationBar--> <!--<phone:PhoneApplicationPage.ApplicationBar> <shell:ApplicationBar IsVisible="True" IsMenuEnabled="True"> <shell:ApplicationBarIconButton IconUri="/Images/appbar_button1.png" Text="Button 1"/> <shell:ApplicationBarIconButton IconUri="/Images/appbar_button2.png" Text="Button 2"/> <shell:ApplicationBar.MenuItems> <shell:ApplicationBarMenuItem Text="MenuItem 1"/> <shell:ApplicationBarMenuItem Text="MenuItem 2"/> </shell:ApplicationBar.MenuItems> </shell:ApplicationBar> </phone:PhoneApplicationPage.ApplicationBar>--> </phone:PhoneApplicationPage>
定义一个test类,这个类中同样定义一个名为strs的ObservableCollection<string>
页面初始化以后设置DataContext为this
在Button点击以后设置DataContext为test类的实例Code:protected override void OnNavigatedTo(NavigationEventArgs e) { DataContext = this; }
全部code behind代码如下:Code:private void button1_Click(object sender, RoutedEventArgs e) { DataContext = _test; }
Code:using System; using System.Collections.Generic; using System.Linq; using System.Net; using System.Windows; using System.Windows.Controls; using System.Windows.Documents; using System.Windows.Input; using System.Windows.Media; using System.Windows.Media.Animation; using System.Windows.Navigation; using System.Windows.Shapes; using Microsoft.Phone.Controls; using System.Collections.ObjectModel; namespace HelloWP7 { public partial class MainPage : PhoneApplicationPage { private ObservableCollection<string> _strs; public ObservableCollection<string> strs { get { return _strs; } } public test _test; // Constructor public MainPage() { _strs = new ObservableCollection<String> { "hello1", "hello2" }; _test = new test(); InitializeComponent(); } protected override void OnNavigatedTo(NavigationEventArgs e) { DataContext = this; } private void button1_Click(object sender, RoutedEventArgs e) { DataContext = _test; } } public class test { private ObservableCollection<string> _strs; public ObservableCollection<string> strs { get { return _strs; } } public test() { _strs = new ObservableCollection<String> { "world1", "world2" }; } }; }

Reply With Quote

