2013-04-26 81 views
0

嗨,大家好我正试图绑定一些数据。 我有一个人的名单。点击每个这些我把用户的详细信息页面。绑定不工作windows phone 7

每个项目的水龙头,我从网络获取数据和解析它。

public ObservableCollection<ItemViewModel> PeopleDetails { get; set; } 

上述行我在MainViewModel宣布

ItemViewModel.cs

在每个项目上的自来水
public class ItemViewModel : INotifyPropertyChanged 
    { 

     private string _person_name; 
    public string _Person_name 
    { 
     get { return _person_name; } 

     set 
     { 
      if (value != _person_name) 
      { 
       _person_name= value; 
       NotifyPropertyChanged("_Person_name"); 
      } 
     } 
    } 

    private string _person_info; 
    public string _Person_info 
    { 
     get { return _person_info; } 

     set 
     { 
      if (value != _person_info) 
      { 
       _person_info= value; 
       NotifyPropertyChanged("_Person_info"); 
      } 
     } 
    } 

    private string _person_image_link; 
    public string _Person_image_link 
    { 
     get { return _person_image_link; } 
     set 
     { 
      if (value != _person_image_link) 
      { 
       _person_image_link= value; 
       NotifyPropertyChanged("_Person_image_link"); 
      } 
     } 
    } 

    public event PropertyChangedEventHandler PropertyChanged; 
    private void NotifyPropertyChanged(String propertyName) 
    { 
     PropertyChangedEventHandler handler = PropertyChanged; 
     if (null != handler) 
     { 
      handler(this, new PropertyChangedEventArgs(propertyName)); 
     } 
    } 

    } 

是执行以下代码

 private void getPeopleDetails(object sender, SelectionChangedEventArgs e) 
    { 

     // Navigate to the new page 
     if (e.AddedItems != null && e.AddedItems.Count == 1) 
     { 
      People selectedItem = (People)e.AddedItems[0]; 
      NavigationService.Navigate(new Uri("/PeopleDetailsView.xaml?id="+selectedItem.id, UriKind.Relative)); 


     } 
    } 

然后PeopleDetailsView .xaml.cs我的代码如下

 public PeopleDetailsView() 
    { 
     DataContext = App.Model; 
     InitializeComponent(); 
     Loaded+=new RoutedEventHandler(PeopleDetailsView_Loaded); 
    } 

    private void PeopleDetailsView_Loaded(Object sender ,RoutedEventArgs e){ 
     string id = ""; 
     if (NavigationContext.QueryString.TryGetValue("id",out id)) 
     { 
      string url = "*****&id=" + id;"; 

      WebClient client = new WebClient(); 
      client.DownloadStringCompleted += new DownloadStringCompletedEventHandler(client_DownloadStringCompletedC); 
      client.DownloadStringAsync(new Uri(url)); 
     } 
     } 

    private void client_DownloadStringCompletedC(object sender, DownloadStringCompletedEventArgs e) 
    { 
     try 
     { 

      JToken a = JObject.Parse(e.Result); 
      App.Model.PeopleDetails.Add(
      new ItemViewModel() 
      { 
       _Person_info = a.SelectToken("info").ToString(), 
       _Person_image_link = a.SelectToken("image_link").ToString(), 
       _Person_name = a.SelectToken("name").ToString(), 
      } 
      ); 

     } 
     catch (Exception execp) 
     { 
      MessageBox.Show(execp.Message.ToString()); 
     } 

    } 

,最后我在我的PeopleDetailsView.xaml结合数据如下

 <Grid x:Name="ContentPanel" DataContext="{Binding PeopleDetails}" Grid.Row="1" Margin="12,0,12,0"> 
     <Grid.RowDefinitions> 
      <RowDefinition Height="269*" /> 
      <RowDefinition Height="338*" /> 
     </Grid.RowDefinitions> 
     <Image Height="250" HorizontalAlignment="Left" Margin="12,6,0,0" Name="image1" Stretch="Fill" Source="{Binding _Person_image_link}" VerticalAlignment="Top" Width="246" /> 
     <ScrollViewer Grid.Row="1" Height="274" HorizontalAlignment="Left" Margin="12,42,0,0" Name="scrollViewer1" VerticalAlignment="Top" Width="420"> 
      <TextBlock Height="264" Name="textBlock1" Text="{Binding _Person_info}" /> 
     </ScrollViewer> 
    </Grid> 
</Grid> 

但在PeopleDetailsView我看不到显示任何数据。请帮我

+0

你能告诉我们一些更多的信息?我们需要看到你的ViewModel(ItemViewModel),你是否确定远程方法实际返回数据,并且你正确解析它? – Kenneth 2013-04-26 18:14:20

+0

是的,我也正确地获取数据并解析它。确定il添加ItemViewModel – nyfer 2013-04-26 18:16:52

回答

0

你是ViewModel有一个ObservableCollection项目,你直接绑定到一个孩子的属性。相反,你应该使用列表框和模板绑定:

<ListBox x:Name="ContentPanel" ItemsSource="{Binding PeopleDetails}" Grid.Row="1" Margin="12,0,12,0"> 
    <ListBox.ItemTemplate> 
     <DataTemplate> 
      <Image Height="250" HorizontalAlignment="Left" Margin="12,6,0,0" Name="image1" Stretch="Fill" Source="{Binding _Person_image_link}" VerticalAlignment="Top" Width="246" /> 
      <ScrollViewer Grid.Row="1" Height="274" HorizontalAlignment="Left" Margin="12,42,0,0" Name="scrollViewer1" VerticalAlignment="Top" Width="420"> 
       <TextBlock Height="264" Name="textBlock1" Text="{Binding _Person_info}" /> 
     </ScrollViewer> 
     </DataTemplate> 
    </ListBox.ItemTemplate> 
</ListBox> 
+0

好的,我需要ObservableCollection这里的项目吗? – nyfer 2013-04-26 18:38:50

+0

是的,否则当你添加一个项目时它不会更新。如果你使用的例子,我只是给它应该工作 – Kenneth 2013-04-26 18:39:42

+0

确定它的工作原理。非常感谢 :) – nyfer 2013-04-26 18:52:04