我遇到了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元素。
为什么在运行我的应用程序时看不到任何列表框?
答案 0 :(得分:1)
好吧,您要做的就是将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
属性的项目数组。