2011-10-11 52 views
1

正當我試圖學習數據綁定時,發現其中一個快速入門示例不起作用。你能否告訴我它是錯的還是我在某個地方出了問題?數據綁定問題WP7中的快速入門示例

http://create.msdn.com/en-US/education/quickstarts/Data_Binding_to_Controls#DisplayingItemsWithDataTemplate

的例子使用的CollectionView源和的ObservableCollection類別到數據動態地綁定到UI元素。我使用了listpicker而不是組合框。我怎麼會發現文本塊不會隨着列表選擇器中的選擇改變而改變。 我是否必須實施INotifyProperty已更改?下面是我的C#代碼

namespace binding3 
{ 
public partial class MainPage : PhoneApplicationPage 
{ 
public ObservableCollection<Recording> MyMusic = new ObservableCollection<Recording>(); 
// Constructor 
public MainPage() 
{ 
    InitializeComponent(); 
    MyMusic.Add(new Recording("Chris Sells", "Chris Sells Live", new DateTime(2008, 2, 5))); 
    MyMusic.Add(new Recording("Luka Abrus", "The Road to Redmond", new DateTime(2007, 4, 3))); 
    MyMusic.Add(new Recording("Jim Hance", "Best of Jim Hance", new DateTime(2007, 3, 6))); 
    //listPicker1.DataContext = MyMusic; 
    //RecordingDetails.DataContext = new CollectionViewSource { Source = MyMusic }; 
    LayoutRoot.DataContext = new CollectionViewSource { Source = MyMusic }; 
} 

public class Recording 
{ 
    public Recording() { } 
    public Recording(string artistName, string cdName, DateTime release) 
    { 
     Artist = artistName; 
     Name = cdName; 
     ReleaseDate = release; 
    } 

    public string Artist { get; set; } 
    public string Name { get; set; } 
    public DateTime ReleaseDate { get; set; } 

    public override string ToString() 
    { 
     return Name + " by " + Artist + ", Released: " + ReleaseDate.ToShortDateString(); 
    } 

} 

,這是XAML設計

<!--ContentPanel - place additional content here--> 
<StackPanel x:Name="ContentPanel" Grid.Row="1" Margin="12,0,12,0"> 
    <toolkit:ListPicker Height="150" HorizontalAlignment="Left" Margin="5" x:Name="listPicker1" 
         VerticalAlignment="Top" Width="400" ItemsSource="{Binding}" FontSize="18"> 
     <toolkit:ListPicker.ItemTemplate> 
      <DataTemplate> 
       <StackPanel Orientation="Horizontal" Margin="2"> 
        <TextBlock Text="Artist:" Margin="2"/> 
        <TextBlock Text="{Binding Artist}" Margin="2"/> 
        <TextBlock Text="CD:" Margin="10,2,0,2"/> 
        <TextBlock Text="{Binding Name}" Margin="2"/> 
       </StackPanel> 
      </DataTemplate> 
     </toolkit:ListPicker.ItemTemplate> 
    </toolkit:ListPicker> 
    <StackPanel x:Name="RecordingDetails"> 
     <TextBlock Text="{Binding Artist}" Margin="5,0,0,0"/> 
     <TextBlock Text="{Binding Name}" Margin="5,0,0,0"/> 
     <TextBlock Text="{Binding ReleaseDate}" Margin="5,0,0,0"/> 
    </StackPanel> 
</StackPanel> 

謝謝你,

Alfah

回答

1

當你修改這樣

的XAML代碼工作
<StackPanel x:Name="RecordingDetails"> 
      <TextBlock Text="{Binding SelectedItem.Artist, ElementName= listPicker1}" Margin="5,0,0,0"/> 
      <TextBlock Text="{Binding SelectedItem.Name, ElementName= listPicker1}" Margin="5,0,0,0"/> 
      <TextBlock Text="{Binding SelectedItem.ReleaseDate,ElementName= listPicker1}" Margin="5,0,0,0"/> 
</StackPanel> 

您需要將選擇的listpicker項綁定到文本塊,以便在選擇更改時更新文本塊。不知道是否有更好的方法來做到這一點。無論如何,這解決了問題。

Alfah