我正在尝试让列表视图中的 gridviewcolumns 在更新 Binding 源(视图模型上的 observablecollection)时自动调整为内容。
列表视图填充正常,但在我刷新/更新集合时不起作用。这是我目前正在尝试的解决方案:
XAML:
<ListView x:Name="ListView" ItemsSource="{Binding Collection, NotifyOnSourceUpdated=True}" SourceUpdated="ListView_SourceUpdated">
<ListView.View>
<GridView>
<GridViewColumn Width="Auto" Header="Test" DisplayMemberBinding={Binding Test}" />
</GridView>
</ListView.View>
</ListView>
代码隐藏:
private void requestsListView_SourceUpdated(object sender, DataTransferEventArgs e)
{
GridView gv = requestsListView.View as GridView;
if (gv != null)
{
foreach (var c in gv.Columns)
{
if (double.IsNaN(c.Width))
{
c.Width = c.ActualWidth;
}
c.Width = double.NaN;
}
}
}
据我所知,SourceUpdated 事件永远不会触发。不知道是不是因为datacontext设置为ViewModel?不确定如何与 VM 中的 ListView 交互。
有没有更好的方法来尝试使用 ViewModel 做到这一点?仍然是新的并正在尝试学习 MVVM。