2013-05-29 60 views
2

我有一个WPF中的ListView从数据库中获取数据。我想要的是,当我选中一列时,按下一个按钮,它将显示一行为label.content。这里就是我有这么远,但它不会工作(我删除了一些项目,如身高等从中ATM):在标签中显示一个ListView行

<ListView x:Name="listView" HorizontalAlignment="Left" VerticalAlignment="Top"> 
     <ListView.View> 
      <GridView> 
       <GridViewColumn DisplayMemberBinding="{Binding Path=Item1}" Header="Item1"/> 
       <GridViewColumn DisplayMemberBinding="{Binding Path=Item2}" Header="Item2"/> 
       <GridViewColumn DisplayMemberBinding="{Binding Path=Item3}" Header="Item3"/> 
      </GridView> 
     </ListView.View> 

然后在后面部分的代码:

DataRowView dataRow; 
    int indexInt; 

    indexInt = listView.SelectedIndex; 
    dataRow = listView.Items.GetItemAt(indexInt) as DataRowView; 

    if(dataRow!=null) 
    { 
     labelOne.Content = (dataRow["Item2"]); 
    } 

如果我删除的数据行!= null检查,它将显示此错误: 未将对象引用设置为对象的实例。

任何人都可以帮助我解决这个问题,还是应该以另一种方式解决问题?

回答

1

您应该使用MVVM方法:

- >您ListViewItemsSource财产应绑定到所显示的集合。
- >(可选)您的ListViewSelectedValue属性应该绑定到您的ViewModel中的一个属性,我们称之为CurrentRow
- >labelOneContent属性应该被绑定到CurrentRow(或listView.SelectedValue.Item2,如果你没有做的可选步骤)

而且你不会有从后面了代码UI元素进行修补(这是通常是不好的做法的迹象)。实际上,你可能不需要再命名你的控件了。

它应该是这样的:

<Label name="labelOne" Content="{Binding SelectedValue.Item2, ElementName=listView}" /> 
<ListView x:Name="listView" HorizontalAlignment="Left" VerticalAlignment="Top"> 
     <ListView.View> 
      <GridView> 
       <GridViewColumn DisplayMemberBinding="{Binding Path=Item1}" Header="Item1"/> 
       <GridViewColumn DisplayMemberBinding="{Binding Path=Item2}" Header="Item2"/> 
       <GridViewColumn DisplayMemberBinding="{Binding Path=Item3}" Header="Item3"/> 
      </GridView> 
     </ListView.View> 
+0

我必须说,哇...这是那么容易,我花了谷歌搜索(与尝试不同的方法)的约4小时,当我终于来了在这里,我得到了答案,它很简单!:) 非常感谢! – Renet