C# 获取ListView值

C# 获取ListView值,c#,wpf,listview,selecteditem,C#,Wpf,Listview,Selecteditem,我试图从listview框中获取数据,但未成功 <ListView Name="lst_CallData" Width="950" Height="500" Grid.Row="1" Grid.ColumnSpan="2" ScrollViewer.VerticalScrollBarVisibility="Auto" ScrollViewer.HorizontalScrollBarVisibility="Hidden"> <ListView.View> <

我试图从listview框中获取数据,但未成功

<ListView Name="lst_CallData" Width="950" Height="500" Grid.Row="1" Grid.ColumnSpan="2" ScrollViewer.VerticalScrollBarVisibility="Auto" ScrollViewer.HorizontalScrollBarVisibility="Hidden">
  <ListView.View>
    <GridView>
      <GridViewColumn Header="Name" DisplayMemberBinding="{Binding Col0}" Width="150" />
      <GridViewColumn Header="Num" DisplayMemberBinding="{Binding Col1}" Width="200" />
      <GridViewColumn Header="ID" DisplayMemberBinding="{Binding Col2}" Width="200" />
    </GridView>
  </ListView.View>
 </ListView>

但是datarow在当前上下文中不存在。

在编写WPF时,您必须花时间正确组织数据类型类。我的意思是,不要用过时的
DataRow
元素使用可怕的旧
DataTable
。。。相反,定义您自己的类,一个完全符合目的的类。重要的是,如果您有自己的类,那么您可以开始利用像和这样的接口来帮助进行自动UI更新和数据验证

如果您为数据创建了一个类,那么您可以在一个属性中拥有一个
observeableCollection
完整的类,比如命名为
SomeCollection
。如果您添加了另一个名为
SomeItem
的类类型属性,则可以将这些属性数据绑定到
ListView
,正如@HighCore正确显示的那样:

<ListView ItemSource="{Binding SomeCollection}" SelectedItem="{Binding SomeItem}" />
所以无论如何,这就是HighCore所回避的,也是MVVM开发人员所建议的方法,但是还有一种更快的方法。如果在
列表视图中有数据绑定项
,则只需访问
列表视图即可。如果已命名
列表视图
,则直接从后面的代码中选择EdItem
属性:

YourDataType selectedItem = (YourDataType)lst_CallData.SelectedItem;

。。。其中,
YourDataType
是集合中数据绑定到
ListView

的对象类型。以下是我尝试并能够获取数据行或整个表对象的方法:

[XAML]

   <Grid>
    <Grid.DataContext>
        <localData:MyData />
    </Grid.DataContext>
    <ListView Name="lst_CallData" Width="500" ItemsSource="{Binding MyTable}" SelectionChanged="lst_CallData_SelectionChanged" ScrollViewer.VerticalScrollBarVisibility="Auto" ScrollViewer.HorizontalScrollBarVisibility="Hidden">
        <ListView.View>
            <GridView>
                <GridViewColumn Header="Name" DisplayMemberBinding="{Binding Col0}" Width="150" />
                <GridViewColumn Header="Num" DisplayMemberBinding="{Binding Col1}" Width="200" />
                <GridViewColumn Header="ID" DisplayMemberBinding="{Binding Col2}" Width="200" />
            </GridView>
        </ListView.View>
    </ListView>
</Grid>

使用。我在程序的其余部分使用数据绑定,但我不确定如何在这里仅用于此列表视图。
-就是这样。您是否愿意写一个简短的答案,@HighCore,请^-^。此标记需要回答更多问题…如果您将DataTable对象用作ItemsSource,则它应返回DataRowView。您可以从DataRowView的Row属性获取DataRow。
YourDataType selectedItem = (YourDataType)lst_CallData.SelectedItem;
   <Grid>
    <Grid.DataContext>
        <localData:MyData />
    </Grid.DataContext>
    <ListView Name="lst_CallData" Width="500" ItemsSource="{Binding MyTable}" SelectionChanged="lst_CallData_SelectionChanged" ScrollViewer.VerticalScrollBarVisibility="Auto" ScrollViewer.HorizontalScrollBarVisibility="Hidden">
        <ListView.View>
            <GridView>
                <GridViewColumn Header="Name" DisplayMemberBinding="{Binding Col0}" Width="150" />
                <GridViewColumn Header="Num" DisplayMemberBinding="{Binding Col1}" Width="200" />
                <GridViewColumn Header="ID" DisplayMemberBinding="{Binding Col2}" Width="200" />
            </GridView>
        </ListView.View>
    </ListView>
</Grid>
private void lst_CallData_SelectionChanged(object sender, SelectionChangedEventArgs e)
    {
        DataRowView selectedRowView = this.lst_CallData.SelectedItem as DataRowView;
        if(selectedRowView != null)
        {
            DataRow selectedRow = selectedRowView.Row; // To get the partcular data row
            DataTable inputTable = selectedRowView.DataView.Table; //To get the entire table data
        }
    }