在WP7中将数据绑定到页面后更新页面

时间:2011-09-23 09:07:41

标签: c# windows-phone-7

我们有从服务器获取数据的代码,数据被解压缩并解析然后文件的名称以及与它们相关的图标应该显示在UI上,我们正在使用列表框并尝试绑定这两个元素到列表框,数据被绑定但我们无法在绑定后更新页面。

</ListBox.ItemsPanel>
<ListBox.ItemTemplate>
<DataTemplate>
     <Image Source="{Binding Icon, Mode=OneWay}" Grid.Column="0" HorizontalAlignment="Center" Grid.Row="1"/>
<TextBlock Padding="10" Text="{Binding Widget, Mode=OneWay}" FontSize="20" Grid.Row="2" Grid.RowSpan="2" TextWrapping="Wrap"  Grid.ColumnSpan="2" />
</Grid>
</DataTemplate>
</ListBox.ItemTemplate>
</ListBox>`   

1 个答案:

答案 0 :(得分:2)

确保:

  1. 将UIManager类设置为XAML控件的dataContext。
  2. UIManager必须实现INotifyPropertyChanged才能通知UI您绑定的集合已更改(在您的案例中添加了一些项目)。

  3. 最重要的 - 使用输出窗口查找所有XAML绑定问题。

    类UIManager:INotifyPropertyChaged {

    private ObservableCollection<ItemsList> _displayItem;
    
        public ObservableCollection<ItemsList> DisplayItem
        {
           get
           {
              return _displayItem;
           }
           set
           {
              if(value != _displayItem)
              {
                 _displayItem=value;
                 NotifyPropertyChanged("DisplayItem");
              }
           }
    
        public UIManager()
        {
           DisplayItem = new ObservableCollection<ItemsList>();
           DisplayCat(DataManager.getInstance().displayName, DataManager.getInstance().icons);
        }
    
        public void DisplayCat(string[] DisplayNames, BitmapImage[] Icon)
        {
                ObservableCollection<ItemsList> tmpColl = new ObservableCollection<ItemsList>();        
    
        for (int i = 0; i < DataManager.getInstance().count; i++)
            {
                    tmpColl.Add(new ItemsList { Widget = DisplayNames[i], Icon = Icon[i] });
            }
        DisplayItem = tmpColl;
        }
    
    public event PropertyChangedEventHandler PropertyChanged;
    
    private void NotifyPropertyChanged(String info)
    {
            if (PropertyChanged != null)
            {
                PropertyChanged(this, new PropertyChangedEventArgs(info));
            }
    }
    

    }