我在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检查,它将显示以下错误: 对象引用未设置为对象的实例。
任何人都可以帮我解决这个问题,还是应该以其他方式解决这个问题?
答案 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>