我在 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"]);
}
如果我删除数据行!=null 检查,它将显示此错误: 对象引用未设置到对象的实例。
谁能帮我解决这个问题,还是我应该换一种方式解决这个问题?
最佳答案
您应该使用 MVVM 方法:
--> 你的 ListView
的 ItemsSource
属性应该绑定(bind)到正在显示的集合。
--> (可选)您的 ListView
的 SelectedValue
属性应该绑定(bind)到您的 ViewModel 中的属性,我们称它为 CurrentRow
。
--> labelOne
的 Content
属性应该绑定(bind)到 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>
关于c# - 在标签中显示 ListView 行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16816858/