显示2项时WPF绑定列表框错误
我的窗口中有一个WPF列表框。在窗口的加载事件中,我创建了一个(对象)列表,并添加了一些项目。在应用程序启动或调试时,我可以看到项目。 如果我在列表中添加了1项,则正确地只看到1项。如果我添加了3个或更多项目,我将正确地看到3个或更多项目。如果只添加2个项目,则只会看到1个项目。为什么? 这是我的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/
<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>