Я пытаюсь получить gridviewcolumns в listview для автоматического размера для контента, когда обновляется источник привязки (наблюдаемый коллектив на модели просмотра).Autoresize Listview Columns on content update
Listview заполняет отлично, но не работает, когда я обновляю/обновляю коллекцию. Это решение, которое я пытаюсь до сих пор:
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>
Codebehind:
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? Не знаете, как взаимодействовать с ListView с виртуальной машины.
Есть ли лучший способ попытаться сделать это с помощью ViewModel? Еще новичок и пытается узнать MVVM.
К сожалению - я предполагаю, что я имел в виду, это, но я могу включить код, если это необходимо. У меня есть ObservableCollection (Collection) в ViewModel, который является DataContext вышеуказанного представления. У меня также есть кнопка, привязанная к команде, которая повторно заполняет ObservableCollection (коллекция) новыми данными, которые не отображаются в ListView без проблем. Если я должен включить этот код, дайте мне знать, но я не думаю, что это было актуально, поскольку оно стандартно и работает без проблем. – ctd25