Элемент управления WPF ListView заполнен, но невидим - PullRequest
1 голос
/ 12 апреля 2011

У меня есть ListView, заполненный ItemsSource, указывающим на список историй входа в систему, так что я могу выбирать из предыдущих успешных входов в систему вместо необходимости вводить пользователя, хост и т. Д. Казалось, это работает нормально, но по какой-то причине привязка данных работает нормально, но элементы в элементе управления невидимы. Я могу сказать, что элемент управления заполняется правильно, потому что «призраки» элементов доступны и выделяются при наведении на них курсора, в правильном количестве, как в моем ItemsSource, и они связаны правильно - например, если мой ItemsSource имеет LoginA, LoginQ, и LoginZ и нажмите на второй «невидимый» пункт, происходит LoginQ. Я пробовал возиться с непрозрачностью, меняя место привязки ItemsSource (после / до появления диалогового окна входа и т. Д.). без радости По сравнению с более старой рабочей версией я не вижу ничего, что может показаться актуальным. Советы, предложения и приветствия приветствуются .....

Ответы [ 4 ]

1 голос
/ 26 ноября 2015

У меня была такая же проблема, и проблема была в привязке, в файле xaml.

<GridViewColumn Header="Category" Width="Auto" DisplayMemberBinding="{Binding yourVariable}"/>

Я изменил некоторые строки в коде (xaml.cs), но не в xaml, поэтому привязка не работала должным образом (listView в xaml.cs был заполнен, но WPF не сделал ' не знаю, как поместить их в ListView в xaml).

В тот момент, когда я исправляю это в xaml, строки в ListView становятся видимыми.

1 голос
/ 12 апреля 2011

ответ devdigital помог мне найти проблему;Я пытался привязать к полям в своем классе LoginHistory, которые были определены как:

публичная строка foo;

Ранее я определял поля как:

публичная строка foo {get;задавать;}

но изменил их, когда у меня возникли некоторые проблемы с доступностью, и никогда не менял их обратно.Имея {получить;задавать;} define позволяет им снова быть видимыми для привязки данных.Кен (я - ОП, но каким-то образом вопрос изначально был опубликован как «новый пользователь», поэтому я не думаю, что смогу пометить его как ответ).

1 голос
/ 12 апреля 2011

Похоже, что свойства в типе элемента списка на самом деле не являются свойствами (это могут быть открытые поля, которые вы не можете привязать), или их значения позже изменятся в вашем коде, и вы не реализовали INotifyPropertyChanged , чтобы уведомить механизм привязки XAML об обновлении их значений.

0 голосов
/ 12 апреля 2011

Вот класс для моего ItemsSource: List и XAML, который ссылается на него. ++++++++++++++++++++++++++++++++++++++++++++++++++ +++++++++++++++++++++++++++++++++ открытый класс LoginHistory { пользователь публичной строки; публичная строка host; публичная струнная компания; бла бла бла......... }

+++++++++++++++++++++++++++++++++++++++++++++++ ++++++++++++++++++++++++++++++++++++++

            <Border Name="mask" Opacity="0.8"  Background="White" Grid.Row="0" Grid.Column="0" Grid.ColumnSpan="2" CornerRadius="0,0,0,10"/>
            <ListView Background="White" BorderThickness="0" Grid.Row="0" Grid.Column="0" Grid.ColumnSpan="2"
                      IsSynchronizedWithCurrentItem="True" HorizontalAlignment="Stretch" 
                      x:Name="HistoryListView" VerticalAlignment="Stretch" Width="Auto" 
                      Height="Auto" FontSize="14" SelectionMode="Single"
                      SelectionChanged="HistoryListView_SelectionChanged">
                <ListView.OpacityMask>
                    <VisualBrush Visual="{Binding ElementName=mask}"/>
                </ListView.OpacityMask>
                <ListView.ItemContainerStyle>
                    <Style TargetType="{x:Type ListViewItem}">
                        <Setter Property="Height" Value="40"/>
                    </Style>
                </ListView.ItemContainerStyle>
                <ListView.View>
                    <!--
                    <GridView ColumnHeaderTemplate="{StaticResource HeaderTemplateNoArrow}" AllowsColumnReorder="True">
                        -->

пользователь

                        <GridViewColumn DisplayMemberBinding="{Binding Path=company}">
                            <GridViewColumnHeader>Company</GridViewColumnHeader>
                        </GridViewColumn>

                        <GridViewColumn DisplayMemberBinding="{Binding Path=host}">
                            <GridViewColumnHeader>Host</GridViewColumnHeader>
                        </GridViewColumn>

                    </GridView>
                </ListView.View>
            </ListView>
            <Border BorderThickness="1" Margin="0" BorderBrush="Gray" Grid.Row="0" Grid.Column="0" Grid.ColumnSpan="2" CornerRadius="0,0,0,10">
            </Border>
...