【问题标题】:how to get column from listview in WPF如何从 WPF 中的列表视图中获取列
【发布时间】:2014-08-05 16:25:09
【问题描述】:

如果我们使用 DataGrid 从我可以使用的列中获取值

var a = datagrid1.Columns[1].GetCellContent(item)

谁能告诉我如何在使用 ListView 而不是 DataGrid 时获得相同的值。此 ListView 包含一个 GridView。

【问题讨论】:

    标签: wpf listview gridview datagrid


    【解决方案1】:

    试试这个

    xaml

     <ListView Margin="10" Name="UsersList" SelectionChanged="UsersList_SelectionChanged_1">
                <ListView.View>
                    <GridView>
                        <GridViewColumn Header="Name" Width="120">
                            <GridViewColumn.CellTemplate>
                                <DataTemplate>
                                    <Grid x:Name="colGrid">
                                        <TextBlock Text="{Binding Name}" x:Name="txtBlock"/>
                                    </Grid>
                                </DataTemplate>
                            </GridViewColumn.CellTemplate>
                        </GridViewColumn>
                        <GridViewColumn Header="Age" Width="50">
                            <GridViewColumn.CellTemplate>
                                <DataTemplate>
                                    <Grid x:Name="colGrid">
                                        <TextBlock Text="{Binding Age}" x:Name="txtBlock"/>
                                    </Grid>
                                </DataTemplate>
                            </GridViewColumn.CellTemplate>
                        </GridViewColumn>
                        <GridViewColumn Header="Mail" Width="150">
                            <GridViewColumn.CellTemplate>
                                <DataTemplate>
                                    <Grid x:Name="colGrid">
                                        <TextBlock Text="{Binding Mail}" x:Name="txtBlock"/>
                                    </Grid>
                                </DataTemplate>
                            </GridViewColumn.CellTemplate>
                        </GridViewColumn>
                    </GridView>
                </ListView.View>
            </ListView>
    

    列表视图的SelectionChanged事件处理程序

            private void UsersList_SelectionChanged_1(object sender, SelectionChangedEventArgs e)
        {
            var gridView = UsersList.View as GridView;
            ListBoxItem myListBoxItem =UsersList.ItemContainerGenerator.ContainerFromItem(UsersList.SelectedItem) as ListBoxItem;
    
            //ContentControl does not directly host the elements provided by the expanded DataTemplate.  
            //It uses a ContentPresenter to do the  work. 
            //If we want to use the FindName method we will have to pass that ContentPresenter as the second argument, instead of the ContentControl. 
            ContentPresenter myContentPresenter = myListBoxItem.GetVisualChild<ContentPresenter>();
    
            foreach (var column in gridView.Columns)
            {
                //Here using FindName we can get the controls of cell template
                var grid = column.CellTemplate.FindName("colGrid", myContentPresenter);
            }
        }
    

    视觉助手

        public static class VisualHelper
    {
        public static T GetVisualChild<T>(this Visual parent) where T : Visual
        {
            T child = default(T);
    
            for (int index = 0; index < VisualTreeHelper.GetChildrenCount(parent); index++)
            {
                Visual visualChild = (Visual)VisualTreeHelper.GetChild(parent, index);
                child = visualChild as T;
    
                if (child == null)
                    child = GetVisualChild<T>(visualChild);//Find Recursively
    
                else
                    return child;
            }
            return child;
        }
    }
    

    我希望这会有所帮助。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2011-06-25
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2023-03-07
      • 1970-01-01
      相关资源
      最近更新 更多