Wpf 如何在listview中获取自动调整宽度列的实际宽度?

Wpf 如何在listview中获取自动调整宽度列的实际宽度?,wpf,xaml,listview,Wpf,Xaml,Listview,我有一个非常简单的wpf列表视图 <ListView ItemsSource="{Binding items}" MinHeight="0"> <ListView.View> <GridView x:Name="columnsGridView"> </GridView> </ListView.View>

我有一个非常简单的wpf列表视图

        <ListView ItemsSource="{Binding items}" MinHeight="0">
            <ListView.View>
                <GridView x:Name="columnsGridView">
                </GridView>
            </ListView.View>
        </ListView>
在listview的SizeChanged函数中,我运行了

            foreach (var item in columnsGridView.Columns.Select((v, i)=> new {v, i}))
            {
                if (someCondition)
                {
                    width += item.v.ActualWidth;
                }
            }
但我发现实际宽度始终为0,而宽度为NaN(这正是我需要的)

如果我指定它的宽度,那么我当然可以得到宽度。但是,在listview的SizeChanged func中,如何获取自动宽度项的宽度

附言。
我注意到,在这个函数之外,我可以获得它们的宽度。

首先,我必须定义至少一列,以便显示项目:

 <ListView MinHeight="0" Loaded="ListView_Loaded" >

        <ListView.View>
            <GridView  x:Name="GridViewInstance">
                <GridViewColumn  DisplayMemberBinding="{Binding}" Header="First Name" />
            </GridView>

        </ListView.View>

        <ListView.Items>
            <sys:String>1</sys:String>
            <sys:String>2</sys:String>
            <sys:String>3</sys:String>
            <sys:String>4</sys:String>
            <sys:String>5</sys:String>
            <sys:String>6</sys:String>
            <sys:String>7</sys:String>
        </ListView.Items>
    </ListView>

现在您可以根据需要进行操作

只需思考。。。新的{v,i}?这不意味着你实际上创建了一个新对象吗?这也解释了为什么它的实际宽度是0。。。但我可能错了--
 <ListView MinHeight="0" Loaded="ListView_Loaded" >

        <ListView.View>
            <GridView  x:Name="GridViewInstance">
                <GridViewColumn  DisplayMemberBinding="{Binding}" Header="First Name" />
            </GridView>

        </ListView.View>

        <ListView.Items>
            <sys:String>1</sys:String>
            <sys:String>2</sys:String>
            <sys:String>3</sys:String>
            <sys:String>4</sys:String>
            <sys:String>5</sys:String>
            <sys:String>6</sys:String>
            <sys:String>7</sys:String>
        </ListView.Items>
    </ListView>
private void ListView_Loaded(object sender, RoutedEventArgs e)
    {

        var test = GridViewInstance.Columns[0].ActualWidth;
    }