ItemsControl不显示项目

问题描述 投票:0回答:1

自从我定期与XAML合作以来,我一直在努力学习基础知识。

我试图在ItemsControl中显示项目,如下所示:

<DockPanel DockPanel.Dock="Left" Width="800">

    <TextBlock DockPanel.Dock="Top" Text="{Binding ProfilePages.Count}"></TextBlock>

    <Grid>
        <ItemsControl ItemsSource="{Binding ProfilePages}">
            <ItemsControl.ItemTemplate>
                <DataTemplate>
                    <TextBlock Text="Hello World" Height="100" Width="200" Background="AliceBlue"></TextBlock>
                </DataTemplate>
            </ItemsControl.ItemTemplate>
        </ItemsControl>

    </Grid>   

</DockPanel>

ViewModel就像基本一样:

public class XtmProjectViewModel : NotifyingObject
{
    private ViewModelCollection<XtmProfilePageViewModel, XtmProfilePage> _profilePages;

    public ViewModelCollection<XtmProfilePageViewModel, XtmProfilePage> ProfilePages
    {
        get { return _profilePages; }

        set
        {
            _profilePages = value;
            RaisePropertyChanged(() => ProfilePages);
        }
    }

    public ViewModelCollection<XtmSearchPageViewModel, XtmSearchPage> SearchPages { get; }

    public XtmProjectViewModel(XtmProject model)
    {
        ProfilePages = new ViewModelCollection<XtmProfilePageViewModel, XtmProfilePage>(model.ProfilePages, s => new XtmProfilePageViewModel(s));
        SearchPages = new ViewModelCollection<XtmSearchPageViewModel, XtmSearchPage>(model.SearchPages, s => new XtmSearchPageViewModel(s));
        ProfilePages.CollectionChanged += ProfilePages_CollectionChanged;
    }

    private void ProfilePages_CollectionChanged(object sender, System.Collections.Specialized.NotifyCollectionChangedEventArgs e)
    {
        Console.WriteLine("Test");
        RaisePropertyChanged(() => ProfilePages);
    }
}

qazxsw poi是一种自定义类型,可自动与基础模型集合同步。我已经在所有类型的场景中使用了多年而没有任何问题。

但是,在视图中,项目没有出现,我得到一个奇怪的行为,我无法解释:

  • 绑定到ViewModelCollection的文本块按预期工作,即显示的数字是列表中的项目数。
  • 没有绑定错误
  • ProfilePages.Count集合的CollectionChanged事件被正确解雇
  • ProfilePages事件处理程序中为整个集合属性添加RaisePropertyChanged事件也不会改变行为
  • CollectionChanged属性的get访问器被调用两次,就像之前的sceanrio(解雇ProfilePages)一样
  • 当我在调试时编辑XAML时,有时项目会按预期显示在RaisePropertyChanged中。但是,项目列表之后不会更新

我无法解释这种行为,也不知道问题是什么。我检查了常见的麻烦(ItemsControl的错误定义,缺少ItemTemplate事件,布局错误导致项目无形地呈现等等,但没有成功)。

如何解释这种行为?怎么修好?

wpf xaml itemscontrol
1个回答
2
投票

根据OP的要求,将我的评论移到答案,15000我们来了;)

想知道你是否将对象插入到不在UI线程上的ProfilePages中。

© www.soinside.com 2019 - 2024. All rights reserved.