[英]WPF ListBox doesn't show any content
我遇到了 ListBox 的问题。 我正在尝试用数据库中的数据填充它,但列表框没有显示。 我查看了许多类似的问题,但没有找到任何适合我的答案:(我的 ListBox 代码:
<ListBox x:Name="OrdersListBox" Grid.Row="1" VerticalContentAlignment="Center" ItemTemplate="{StaticResource OrdersTemplate}">
</ListBox>
对于 OrdersTemplate:
<DataTemplate x:Key="OrdersTemplate">
<StackPanel>
<DockPanel DockPanel.Dock="Left" DataContext="{StaticResource OrdersViewSource}">
<TextBlock Text="OrderID: " FontSize="18"/>
<TextBlock Text="{Binding OrderID}" FontSize="18"/>
</DockPanel>
</StackPanel>
</DataTemplate>
页面代码:
public partial class Account : Page
{
Entities1 Context;
Customers Customer;
CollectionViewSource OrdersViewSource;
public Account(Entities1 Context, Customers Customer)
{
InitializeComponent();
this.Context = Context;
this.Customer = Customer;
this.OrdersViewSource = this.FindResource("OrdersViewSource") as CollectionViewSource;
DataContext = this;
}
private void Window_Loaded(object sender, RoutedEventArgs e)
{
Context.Orders.Load();
this.OrdersViewSource.Source = Context.Orders.Local.Where(o => o.CustomerName == Customer.CompanyName).Select(o => o);
}
private void Button_Click(object sender, RoutedEventArgs e)
{
Orders Order = new Orders
{
CustomerName = Customer.CompanyName
};
NewOrder NewOrder = new NewOrder(Context, Order);
this.NavigationService.Navigate(NewOrder);
}
}
我在 Grid.Resources 中也有这个:
<CollectionViewSource x:Key="OrdersViewSource"/>
我很确定绑定有效,因为以这种方式调用 ListBox 时:
<ListBox x:Name="OrdersListBox" Grid.Row="1" VerticalContentAlignment="Center" ItemTemplate="{StaticResource OrdersTemplate}">
<DockPanel/>
</ListBox>
它显示了第一个 OrderID 元素。
为什么我在运行我的应用程序时看不到任何 ListBox?
好的,您所做的是将您的ItemTemplate
绑定到您想要的资源。 哪个应该是ItemsSource
。 当您手动添加项目时,列表会尝试使用您提供的模板呈现您的项目,该模板是您的实际数据。
你可能想做这样的事情:
<ListBox x:Name="OrdersListBox" Grid.Row="1"
VerticalContentAlignment="Center"
ItemTemplate="{StaticResource OrdersTemplate}"
ItemsSource="{Binding Source={StaticResource OrdersViewSource}}">
</ListBox>
然后像这样删除模板上的数据绑定:
<DataTemplate x:Key="OrdersTemplate">
<StackPanel>
<DockPanel DockPanel.Dock="Left">
<TextBlock Text="OrderID: " FontSize="18"/>
<TextBlock Text="{Binding OrderID}" FontSize="18"/>
</DockPanel>
</StackPanel>
</DataTemplate>
我不确定这是否有效,因为我不知道OrdersViewSource
中的数据是否是您想要在列表中显示的实际项目,但您明白了。
您需要分配给列表的ItemsSource
属性的项目数组。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.