在标签中显示ListView行

时间:2013-05-29 14:37:31

标签: c# wpf listview

我在WPF中有一个从数据库获取数据的ListView。我想要的是,当我选择一列时,按一个按钮,它会显示一行作为label.content。这是我迄今为止所拥有的,但它不会起作用(我从它上面删除了一些高度等物品):

<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"]);
    }

如果我删除了datarow!= null检查,它将显示以下错误: 对象引用未设置为对象的实例。

任何人都可以帮我解决这个问题,还是应该以其他方式解决这个问题?

1 个答案:

答案 0 :(得分:1)

您应该使用MVVM方法:

- &GT;您的ListView ItemsSource属性应绑定到正在显示的集合 - &GT; (可选)您的ListView SelectedValue属性应绑定到ViewModel中的属性,我们称之为CurrentRow
- &GT; labelOne Content属性应绑定到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>