如何呈现数据绑定视图?

时间:2012-07-09 06:55:45

标签: windows-phone-7

当Windows Phone 7应用程序打开视图时,将遵循特定的业务顺序进行创建。至于构造函数和事件,我发现这个顺序是正确的:

  1. Constructor
  2. OnNavigatedTo
  3. OnLoaded
  4. 但是,在基本视图(背景,其他元素等)加载后,我需要将List数据绑定到ListBox。所以我需要知道在开始使用数据绑定之前何时以及如何知道视图已加载。

    我试图在OnLoaded - 事件上执行此操作,但似乎我在这里进行数据绑定 - 并且在它遍历这些元素之后 - 它们似乎还不存在({ {1}} - 类似乎无法找到节点)。如你所见,我被卡住了。

    非常感谢任何帮助。

    编辑:根据要求,这里有一些关于发生了什么的更多信息。

    我的VisualTreeHelper由一些自定义(不太复杂)的对象填充,包括异步加载的图像(由delay.LowProfileImageLoader提供)和一个矩形。

    XAML:

    List

    代码隐藏:

    <ListBox x:Name="ChannelsListBox" ItemsSource="{Binding AllChannels}">
    //... 
    <ListBox.ItemTemplate>
        <DataTemplate>
            <Grid x:Name="ChannelTile" Margin="6,6,6,6" Tap="ChannelTile_Tap" Opacity="0.4">
                <!-- context menu goes here -->
                <Rectangle Width="136" Height="136" Fill="{StaticResource LightGrayColor}" />
                <Image Width="136" Height="136" delay:LowProfileImageLoader.UriSource="{Binding ImageUri}" />
            </Grid>
        </DataTemplate>
    </ListBox.ItemTemplate>
    </ListBox>
    

    项目本身是内存的(在应用程序的早期阶段从REST获取),因此应立即可用。

    我想解决的问题是在这个特别的视图上加载时间相当长(大约有140个项目被创建,然后通过过滤并改变不透明度)。

1 个答案:

答案 0 :(得分:0)

我相信你做的事情如下:

myListBox.ItemSource=myList;

设置ListBox的ItemSource后,List中的更改应始终反映在ListBox中。如果ListBox为空,则原因必须是List未正确填充或ItemTemplate中的Bindings无效。您应该通过在Loaded()方法中插入断点来调试并查明您的List是否有任何项目。另外,您还没有提到您的列表包含哪些项目,或者它在应用程序中的填充位置?不完整的信息对任何人都没有帮助。