繁体   English   中英

WPF 列表框不显示任何内容

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM