none
关于数据绑定的延迟 RRS feed

  • 问题

  • 用LongListSelector,做了一个数据绑定应用,但是当数据源发生更改时,需要重新载入页面才可以实现数据更新。

    尝试使用了UpdateLayout(); 和InvalidateArrange();都不行。

    只有使用NavigationService.Navigate(new Uri("/Passage.xaml" +"?Refresh=" + Guid.NewGuid(), UriKind.Relative));  成功了

    但是,遗憾的是Passage页面是一个Pivot页面而我要更新的页面不是第一个PivotItem……

    这个要更新的页面是一个评论页面,当按下评论按钮时会弹出一个Canvas,评论完成后Canvas消失大概就是这么个情况!这个时候数据源就已经更新了,但与数据源绑定的控件并没有更新!

    请问如何实现刷新页面?

    万分感谢!

    2014年7月20日 12:27

答案

全部回复

  • 你好。

    这种情况下,你绑定到LongListSelector控件的数据源应该是ObservableCollection类型,这样控件会在数据源发生改变时自动更新。

    2014年7月21日 1:49
  • 亲,能否给个例子。

    我绑定的数据源是一个List<Comment>,怎么转化成ObservableCollection类型呢?求指教!

    2014年7月21日 4:38
  • 两种方式:

    1. 把数据源由List<Comment> 换成 ObservableCollection<Comment>,

        命名空间是:System.Collections.ObjectModel。

    2. 在数据绑定时,把List<Comment> 转换为ObservableCollection类型:

    var demos = new List<Demo>();
    lls.ItemsSource = new ObservableCollection<Demo>(demos);
    其中lls是LongListSelector的名字。

    2014年7月21日 4:44
  • 测试了这两种方法,先说第二种,失败了,代码如下

     var comment = new List<Comment>(viewModelCommentList.Comments);

    CommentLongListSelector.ItemsSource = new ObservableCollection<Comment>(comment);

    再说第一种

    修改完成了,但是直接运行时莫名其妙崩溃。

    看来我需要再解释一下我绑定的东西是个什么情况

    首先LongListSelector绑定的ItemTemplate是一个评论框,代码如下

    <DataTemplate x:Key="CommentMessage">
                <Grid Margin="0,0,12,12">
                    <Grid.Background>
                        <SolidColorBrush Color="White" Opacity="0.15"/>
                    </Grid.Background>
                    <StackPanel>
                        <TextBlock Text="{Binding CommentContent}"
                                       FontSize="20" 
                                       Margin="12,12,12,0"
                                       TextWrapping="Wrap"
                                       TextAlignment="Left"/>
                        <Grid Height="50">
                            <Grid.ColumnDefinitions>
                                <ColumnDefinition Width="*"/>
                                <ColumnDefinition Width="*"/>
                            </Grid.ColumnDefinitions>
     
                            <HyperlinkButton Content="{Binding CommentorName}"
                                                 HorizontalAlignment="Left"
                                                 VerticalAlignment="Center"
                                                 Margin="12"
                                                 Grid.Column="0"
                                                 Foreground="Azure"
                                                 />
                            <TextBlock Text="{Binding CommentTime}"
                                           HorizontalAlignment="Center"
                                           VerticalAlignment="Center"
                                           Margin="12"
                                           Grid.Column="1"
                                           />
                        </Grid>
                    </StackPanel>
                </Grid>
            </DataTemplate>

    LongListSelector的ItemSource绑定的是Comments

    昨天刚开始的时候,我每次添加一条评论时,立刻就会多出一个评论框,但遗憾是的内容和之前的默认的那个一样。当时我想,这应该不是LongListSelector的问题……后来不知道修改了什么,就算评论了也不会立刻多出一个评论框……

    这个问题好郁闷……  亲啊!肿么办?

    2014年7月21日 5:18
  • 第二种方法报的错是:- _exception {System.Windows.LayoutCycleException: Layout cycle detected.  Layout could not complete.} System.Exception {System.Windows.LayoutCycleException}
    2014年7月21日 5:22
  • 第二种方法报的错是

    - _exception {System.Windows.LayoutCycleException: Layout cycle detected.  Layout could not complete.} System.Exception {System.Windows.LayoutCycleException}

    2014年7月21日 5:23
  • 这个问题的解答请见你的另外一个问题:这个错误怎么解决
    • 已标记为答案 孟云帆 2014年7月24日 14:48
    2014年7月22日 3:45