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