ListBox只从ItemSource中获取8个项目

时间:2012-06-18 15:00:41

标签: wpf windows-phone-7 windows-phone

我正在开发Windows手机上的应用程序。 在View上我有带ListBox的网格:

<Grid x:Name="ContentGrid"
              Grid.Row="1">
            <ListBox x:Name="TestListbox" 
                ItemsSource="{Binding History}"                    
                Margin="24,0"   
                SelectionChanged="GoToSelection" 
                ItemTemplate="{StaticResource HistoryDataTemplate}"
                >

            </ListBox>            
        </Grid>

历史是ObservableCollection。

HistoryDataTemplate看起来像:

 <phone:PhoneApplicationPage.Resources>
        <DataTemplate x:Key="HistoryDataTemplate">
            <Grid>
                <HistoryControls:HistoryItem d:LayoutOverrides="Width" Margin="0,0,0,24"/>
            </Grid>
        </DataTemplate>
    </phone:PhoneApplicationPage.Resources>

我使用HistoryItem的构造函数来订阅PropertyChanged事件:

     public HistoryItem()
            {
                InitializeComponent();
                base.Loaded+=(new RoutedEventHandler(this.HistoryControl_Loaded));
            }
 private void HistoryControl_Loaded(object sender, RoutedEventArgs e)
        {
            this._dataContext.PropertyChanged += new PropertyChangedEventHandler(this._dataContext_PropertyChanged);
        }

当我有1-8个项目时,所有工作都正确,但是对于> 8个项目,constuctor只被调用8次。

2 个答案:

答案 0 :(得分:4)

如果表单上只有8个项目可见,则不会为关闭屏幕项目调用构造函数,因为列表正在虚拟化它们。

您可以使用属性

更改此行为
 <ListBox x:Name="TestListbox" VirtualizingStackPanel.IsVirtualizing="False"

答案 1 :(得分:1)