2011-04-11 108 views
1

我有一个ListView,填充ItemsSource指向登录历史列表,以便我可以选择以前成功登录而不必键入用户,主机等。这似乎工作正常,但由于某种原因,现在数据绑定工作正常,但控件中的项目是不可见的。我可以告诉控件正在正确填充,因为项目的“鬼魂”是可用的,并突出显示当我把它们鼠标悬停在正确的数量,如我的ItemsSource,并且他们被正确绑定 - 例如,如果我的ItemsSource有LoginA,LoginQ,和LoginZ并点击第二个'隐形'项目,LoginQ发生。我试着弄乱了不透明度,改变了ItemsSource绑定的位置(在登录对话框出现之后/之前等)。没有喜乐。与旧版工作版本相比,我看不到任何看似相关的东西。提示,建议和嘘声欢迎.....WPF ListView控件被填充,但不可见

+0

你可以发布listview的xaml吗? – 2011-04-12 00:12:10

回答

1

这听起来像你的列表项目类型属性或者不是实际属性(它们可能是公共字段,而不是绑定),或他们的值更改稍后在您的代码中,您尚未实施INotifyPropertyChanged以通知XAML绑定引擎其值已更新。

0

这是我的ItemsSource:List的类,以及引用它的XAML。 +++++++++++++++++++++++++++++++++++++++++++++++++ ++++++++++++++++++++++++++++++++++ public class LoginHistory { public string user; 公共字符串主机; 公共字符串公司; 等等,等等,等等......... }

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

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

正如我的回答所述,看起来你正在使用公共领域,而不是属性。你不能绑定到字段。通过添加getters和setter来将您的字段更改为属性。 – devdigital 2011-04-17 20:14:06

1

devdigital的回答帮我找到的问题;我试图绑定到我的LoginHistory类中定义为:

public string foo;

我之前已经定义字段:

公共字符串FOO {获得;组; }

但改变了他们,当我遇到一些问题,并且从未改变他们回来。有{get;组; }定义允许它们再次对数据绑定可见。 Ken(我是OP,但不知怎的,这个问题最初是作为'新用户'发布的,所以我不认为我可以将它们标记为已回答)。

1

我有同样的问题,并在xaml文件中的绑定问题。

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

我已经改变了在后面的代码(xaml.cs),但不是在XAML一些线路,所以结合而不能正常工作(在xaml.cs ListView中被填充,但WPF没”不知道如何将它们放入xaml的ListView中)。

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