2

我在 WPF 中有一个 ListView,它正在从数据库中获取数据。我想要它,当我选择一列并按下按钮时,它将显示一行作为 label.content。这是我到目前为止所拥有的,但它不起作用(我从它的atm中删除了一些高度等项目):

<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 检查,它将显示此错误:对象引用未设置为对象的实例。

谁能帮我解决这个问题,或者我应该以其他方式解决它吗?

4

1 回答 1

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>
于 2013-05-29T14:48:13.940 回答