У меня есть класс YouTubeVideo, который содержит некоторые переменные, которые я хотел бы показать в пользовательском интерфейсе. Поэтому я создал настраиваемый элемент управления, который отображает все данные класса. Существует несколько экземпляров класса, поэтому я хотел бы использовать элемент ItemsControl для отображения их на экране, как в StackPanel. Я определил ViewModel для ItemsControl, и я добавляю пользовательские элементы управления из моего окна кода в ViewModel, однако ItemsControl остается пустым.ItemsSource привязка к коллекции остается пустой
ViewModel
public class VideoInfoListModel : INotifyPropertyChanged
{
private List<VideoInfoListItem> _loadedVideos = new List<VideoInfoListItem>();
public List<VideoInfoListItem> LoadedVideos
{
set {
_loadedVideos = value;
NotifyPropertyChanged("LoadedVideos");
}
get { return _loadedVideos; }
}
public void AddVideo(YouTubeVideo video)
{
LoadedVideos.Add(new VideoInfoListItem(video));
NotifyPropertyChanged("LoadedVideos");
}
public event PropertyChangedEventHandler PropertyChanged;
public void NotifyPropertyChanged(string propertyName)
{
if (PropertyChanged != null)
PropertyChanged(this, new PropertyChangedEventArgs(propertyName));
}
}
ItemsSource XAML
<ItemsControl ItemsSource="{Binding LoadedVideos, Mode=TwoWay, UpdateSourceTrigger=PropertyChanged}" x:Name="videoInfoList" Margin="0">
<ItemsControl.ItemsPanel>
<ItemsPanelTemplate>
<StackPanel Orientation="Horizontal" IsItemsHost="True" />
</ItemsPanelTemplate>
</ItemsControl.ItemsPanel>
</ItemsControl>
из окна кода позади я установить DataContext для ItemsControl к ViewModel в конструкторе:
InitializeComponent(); videoInfoList.DataContext = new VideoInfoListModel();
Я отлаживал ViewModel, и я вижу, что мои пользовательские элементы добавляются в коллекцию успешно, PropertyChanged также срабатывает.
Благодаря
Попробуйте изменить 'List' на' ObservableCollection' –
@NedStoyanov, пожалуйста, добавьте его в качестве ответа, как вы, где сначала. Благодарю вас обоих! Проведите много времени в этом. – Kimmax