【问题标题】:WPF ListView control is populated but invisibleWPF ListView 控件已填充但不可见
【发布时间】:2011-08-03 10:23:03
【问题描述】:

我有一个 ListView,其中填充了指向登录历史列表的 ItemsSource,这样我就可以从以前的成功登录中进行选择,而不必重新输入用户、主机等。这似乎工作正常,但由于某种原因,现在数据绑定工作正常,但控件中的项目是不可见的。我可以告诉控件正在正确填充,因为项目的“幽灵”可用并在我将鼠标悬停在它们上时突出显示,在我的 ItemsSource 中以正确的数字,并且它们被正确绑定 - 例如,如果我的 ItemsSource 有 LoginA、LoginQ、和 LoginZ 并单击第二个“不可见”项目,LoginQ 发生。我试过弄乱不透明度,改变 ItemsSource 的绑定位置(在登录对话框出现之后/之前等)。没有喜悦。与较旧的工作版本相比,我看不到任何似乎相关的内容。欢迎提示、建议和嘘声.....

【问题讨论】:

  • 你能发布列表视图的 xaml 吗?

标签: wpf data-binding listview visibility


【解决方案1】:

听起来你的列表项类型中的属性要么不是真正的属性(它们可能是公共字段,你不能绑定到它),或者它们的值稍后在你的代码中改变并且你还没有实现INotifyPropertyChanged通知 XAML 绑定引擎它们的值已更新。

【讨论】:

    【解决方案2】:

    devdigital 的回答帮助我找到了问题;我试图绑定到我的 LoginHistory 类中的字段,这些字段被定义为:

    公共字符串 foo;

    我之前将字段定义为:

    公共字符串 foo {get;放; }

    但在我遇到可访问性问题时更改了它们,并且从未将它们改回来。有 { 得到;放; } 定义允许它们再次对数据绑定可见。 Ken(我是 OP,但不知何故,这个问题最初是作为“新用户”发布的,所以我认为我不能将这些标记为已回答)。

    【讨论】:

      【解决方案3】:

      我遇到了同样的问题,问题出在绑定中,在 xaml 文件中。

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

      我在 (xaml.cs) 后面的代码中更改了一些行,但在 xaml 中没有更改,因此 binding 无法正常工作(xaml.cs 中的 listView 已填充,但 WPF 没有'不知道如何将它们放在 xaml 中的 ListView 中)。

      当我在 xaml 中修复该问题时,ListView 中的行变为可见。

      【讨论】:

        【解决方案4】:

        这是我的 ItemsSource 的类:List,以及引用它的 XAML。 ++++++++++++++++++++++++++++++++++++++++++++++++++++++ +++++++++++++++++++++++++++++++++++ 公共类登录历史 { 公共字符串用户; 公共字符串主机; 公共字符串公司; 等等等等等等......... }

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

                    <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>
        

        【讨论】:

        • 如我的回答中所述,您似乎使用的是公共字段而不是属性。您不能绑定到字段。通过添加 getter 和 setter 将字段更改为属性。
        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2011-10-12
        • 1970-01-01
        • 2011-05-28
        • 1970-01-01
        相关资源
        最近更新 更多