我已经浏览了一些具有类似要求的帖子,但还没有找到一个完全有效的解决方案。
我在 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。
我究竟做错了什么?谢谢。
编辑:
我看过的一些帖子