显示2项时WPF绑定列表框错误

显示2项时WPF绑定列表框错误,wpf,missing-data,Wpf,Missing Data,我的窗口中有一个WPF列表框。在窗口的加载事件中,我创建了一个(对象)列表,并添加了一些项目。在应用程序启动或调试时,我可以看到项目。 如果我在列表中添加了1项,则正确地只看到1项。如果我添加了3个或更多项目,我将正确地看到3个或更多项目。如果只添加2个项目,则只会看到1个项目。为什么? 这是我的WPF代码 <Window x:Class="Cacatua.MainWindow" xmlns="http://schemas.microsoft.com/winfx/2006/

我的窗口中有一个WPF列表框。在窗口的加载事件中,我创建了一个(对象)列表,并添加了一些项目。在应用程序启动或调试时,我可以看到项目。 如果我在列表中添加了1项,则正确地只看到1项。如果我添加了3个或更多项目,我将正确地看到3个或更多项目。如果只添加2个项目,则只会看到1个项目。为什么?

这是我的WPF代码

<Window x:Class="Cacatua.MainWindow"
        xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
        xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
        xmlns:local="clr-namespace:Cacatua;assembly=" >

    <Grid>
        <ListBox Name="lbSearch" ItemsSource="{Binding}" />
    </Grid>
</Window>
其中Media1是一个包含字符串的简单类

Public Class Media1
    Private myIdTitolo As String
    Public ReadOnly Property IDTitolo As String
        Get
            Return (myIdTitolo)
        End Get
    End Property
    Public Sub New(str As String)
        myIdTitolo = str
    End Sub
End Class
使用此代码,我将看到一个包含此输出的列表(没有datatemplate): 卡卡图亚媒体1 卡卡图亚媒体1

但我只看到 卡卡图亚媒体1


我想这是一只虫子。但是我是第一个遇到这个问题的人吗?

你的想法是对的,但问题是你的
项目资源不知道何时更新,因为你没有使用
可观察的收集。渲染和加载窗口之间还有一个时间问题,我认为这与您没有正确绑定源项有关

对于初学者,尝试将
myLstSearch
的类型更改为
observedcollection(媒体1的)

另外,一种更好的方法是直接从XAML进行数据绑定,因此您的代码隐藏如下:

Public property MyListSearch As ObservableCollection(Of Media1)
然后,您的XAML将如下所示:

<Window x:Class="Cacatua.MainWindow"
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
    xmlns:local="clr-namespace:Cacatua;assembly=">

    <Grid>
        <ListBox Name="lbSearch" ItemsSource="{Binding Path=MyListSearch}" />
    </Grid>
</Window>


这样,您只需在窗口构造函数中初始化
MyListSearch
,然后随时向其中添加元素,而视图将自动更新。

在填充列表后,尝试设置
ItemsSource
,看看这是否有区别。此外,您不需要同时在XAML中绑定
ItemsSource
属性和在代码隐藏中设置它。只使用一个或另一个:)谢谢Rachel,错误是:绑定空列表。我不知道为什么,但是在加载的事件中,如果绑定是在添加列表之后进行的,那么我也只能看到2个项目!错误的是,使用不同于2的items编号,它可以工作…我的最佳猜测是时间问题,尽管我不确定它是否介于ItemsControl被呈现、ItemsSource被设置或它试图解析(无效)绑定之间。这是一个可怕的WPF列表框限制,解决这个限制的方法是一个可怕的超码。。。但我别无选择!下次谢谢你,瑞秋!
<Window x:Class="Cacatua.MainWindow"
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
    xmlns:local="clr-namespace:Cacatua;assembly=">

    <Grid>
        <ListBox Name="lbSearch" ItemsSource="{Binding Path=MyListSearch}" />
    </Grid>
</Window>