我已经阅读了一些有类似要求的帖子,但还没有找到完全可行的解决方案。
我在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。
我做错了什么?感谢。
编辑:
我看过的一些帖子