WPF ListView 控件已填充但不可见
Posted
技术标签:
【中文标题】WPF ListView 控件已填充但不可见【英文标题】:WPF ListView control is populated but invisible 【发布时间】:2011-08-03 10:23:03 【问题描述】:我有一个 ListView,其中填充了指向登录历史列表的 ItemsSource,这样我就可以从以前的成功登录中进行选择,而不必重新输入用户、主机等。这似乎工作正常,但由于某种原因,现在数据绑定工作正常,但控件中的项目是不可见的。我可以告诉控件正在正确填充,因为项目的“幽灵”可用并在我将鼠标悬停在它们上时突出显示,在我的 ItemsSource 中以正确的数字,并且它们被正确绑定 - 例如,如果我的 ItemsSource 有 LoginA、LoginQ、和 LoginZ 并单击第二个“不可见”项目,LoginQ 发生。我试过弄乱不透明度,改变 ItemsSource 的绑定位置(在登录对话框出现之后/之前等)。没有喜悦。与较旧的工作版本相比,我看不到任何似乎相关的内容。欢迎提示、建议和嘘声.....
【问题讨论】:
你能发布列表视图的 xaml 吗? 【参考方案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 将字段更改为属性。以上是关于WPF ListView 控件已填充但不可见的主要内容,如果未能解决你的问题,请参考以下文章
如何有条件地更改数据绑定 WPF ListView 的 CellTemplate 中控件的属性?
WPF绑定到Listview的Itemtemplate的可见性不起作用[重复]
〝WPF〞中的〝ListBox〞、〝ListView〞和〝DataGridView〞有啥区别?