WPF ListBox не показывает контент - PullRequest
0 голосов
/ 08 ноября 2019

У меня проблема с 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 при запуске моего приложения?

1 Ответ

1 голос
/ 08 ноября 2019

Хорошо, вы сделали то, что привязали свой 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 списка.

...