1

我已经浏览了一些具有类似要求的帖子,但还没有找到一个完全有效的解决方案。

我在 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。

我究竟做错了什么?谢谢。

编辑:

我看过的一些帖子

4

0 回答 0