自动调整wpf GridView的列

时间:2016-02-22 17:58:43

标签: c# wpf xaml gridviewcolumn

我已经阅读了一些有类似要求的帖子,但还没有找到完全可行的解决方案。

我在ListView中有一个带有几列的GridView

        <ListView x:Name="TheList" DockPanel.Dock="Top" 
                  ItemsSource="{Binding Itemlist}"                  
                  SelectionMode="Extended">
            <ListView.View>
                <GridView>
                    ....
                    <GridViewColumn x:Name="valueColumn" Header="Value" DisplayMemberBinding="{Binding ItemValue}" Width="150"/>
                </GridView>
            </ListView.View>
        </ListView>

我将模型和子设置为模型的属性更改

        _viewModel = new MyModel();
        DataContext = _viewModel;
        _viewModel.ItemValueChanged += RunResizeLogic; //ItemValueChanged gets emitted when the property changes

然后根据一些解决方案,我发现我尝试调整列的大小

    private void RunResizeLogic(object sender, EventArgs e)
    {
        ResizeGridViewColumn(valueColumn);
    }
    private void ResizeGridViewColumn(GridViewColumn col)
    {
        Dispatcher.Invoke(DispatcherPriority.Normal,
            new Action(() =>
            {
                if (double.IsNaN(col.Width))
                {
                    col.Width = col.ActualWidth;
                }

                col.Width = double.NaN;

            }));
    }

当我的ItemValue更改时,我的调整大小逻辑被调用,但是,只有当ItemValue再次更改时,该列才会调整大小。

因此,如果它的当前大小为5. ItemValue大小更改为10,我的逻辑运行与ActualWidth == 5,列保持相同的大小(5)。 ItemValue大小再次更改为2,逻辑运行ActualWidth == 2并且列调整为10。

我做错了什么?感谢。

编辑:

我看过的一些帖子

0 个答案:

没有答案