Wpf 列表框不显示新项目

Wpf 列表框不显示新项目,wpf,mvvm,Wpf,Mvvm,我有一个列表框,我已经将它的ItemsSource和SelectedIndex绑定到ViewModel中的对象。我还使用扩展器自动滚动到所选项目。当我创建列表时,会有一些初始数据,然后当我在列表中移动时,会添加更多的项目。初始数据显示得很好,我可以像预期的那样滚动浏览它。问题是,一旦我添加了更多项,新项就不会显示在列表框中。当我移动到新项目时,列表框实际上停止滚动到所选项目,但在我向后移动时再次开始。当我在Snoop中查看ItemsSource时,它会显示所有的项目,但不会显示它们。仅显示原始项

我有一个列表框,我已经将它的ItemsSource和SelectedIndex绑定到ViewModel中的对象。我还使用扩展器自动滚动到所选项目。当我创建列表时,会有一些初始数据,然后当我在列表中移动时,会添加更多的项目。初始数据显示得很好,我可以像预期的那样滚动浏览它。问题是,一旦我添加了更多项,新项就不会显示在列表框中。当我移动到新项目时,列表框实际上停止滚动到所选项目,但在我向后移动时再次开始。当我在Snoop中查看ItemsSource时,它会显示所有的项目,但不会显示它们。仅显示原始项目。所以我想我的问题是为什么会这样

这是我用于列表框的xaml

<ListBox ItemsSource="{Binding Path=Items}"
                     Width="{Binding Path=Size.SizeW}"
                     Height="{Binding Path=Size.SizeH}"
                     SelectedIndex="{Binding Path=FocusedRow, Mode=OneWay}"
                     ScrollViewer.HorizontalScrollBarVisibility="Hidden"
                     ScrollViewer.VerticalScrollBarVisibility="Hidden"
                     IsSynchronizedWithCurrentItem="True"
                     extenders:ListBoxExtenders.AutoScrollToCurrentItem="True">
    <ListBox.ItemContainerStyle>
        <Style TargetType="ListBoxItem">
            <Setter Property="Height"
                    Value="{Binding Path=RowHeight}" />
            <Setter Property="Width"
                    Value="{Binding Path=RowWidth}" />
            <Setter Property="Margin"
                    Value="{Binding Path=RowSpacing}" />
        </Style>
    </ListBox.ItemContainerStyle>
    <ListBox.ItemTemplate>
        <DataTemplate>
            <m:CanvasItemsControl ItemTemplateSelector="{StaticResource ResourceKey=listViewItemTemplateSelector}"
                                  Visibility="Visible"
                                  ItemsSource="{Binding Path=ListItems}">
                <ItemsControl.ItemsPanel>
                    <ItemsPanelTemplate>
                        <Canvas Height="{Binding Path=RowHeight}"
                                Width="{Binding Path=RowWidth}"
                                ClipToBounds="True" />
                    </ItemsPanelTemplate>
                </ItemsControl.ItemsPanel>
            </m:CanvasItemsControl>
        </DataTemplate>
    </ListBox.ItemTemplate>
</ListBox>
我不确定还有什么其他信息会有帮助,所以如果您需要查看其他信息,请告诉我,我会添加这些信息

Listbox SelectedIndex绑定到FocusedRow

private uint focusedRow;
public uint FocusedRow
{
    get
    { return focusedRow; }
    set
    {
        if (value == focusedRow)
        { return; }
        focusedRow = value;
        base.RaisePropertyChanged("FocusedRow");
    }
}
ItemsSource已绑定到项

private ObservableCollection<DisplayList> items;
public ObservableCollection<DisplayList> Items
{
    get
    { return items; }
    set
    {
        if (value == items)
        { return; }
        items = value;
        base.RaisePropertyChanged("Items");
    }
}
私有可观察收集项目;
公共可观测收集项目
{
得到
{返回项;}
设置
{
如果(值==项目)
{return;}
项目=价值;
基础。提高资产变更(“项目”);
}
}
确保作为列表框的ItemsSource绑定的“Items”是一个可观察的集合,而不是一个简单的列表


它应该有用

确保新项目具有有效的行高和行宽。这可能是个问题,因为在窥探时,你可以看到你的数据。

我在这里假设,如果它们出现在snoop中,它们的绑定是正确的。@谁是我不相信的。@alvaro不是我的代码:)我做了一个注释,以了解snoop和viewIt之间的区别。这是一个可观察的集合。我会把它们加到问题中。@OliverWeichhold我该怎么说呢。视图中的内容与其绑定的数据之间似乎存在一些断开连接。问题可能出在您的RowHeight和RowWidt中吗?他们是您的视图模型成员吗?用正确的值?@这是谁的问题。新项目的行高和行宽为0。“如果你回答我,我会接受的。”斯科特很高兴这有帮助:)
private ObservableCollection<DisplayList> items;
public ObservableCollection<DisplayList> Items
{
    get
    { return items; }
    set
    {
        if (value == items)
        { return; }
        items = value;
        base.RaisePropertyChanged("Items");
    }
}