【发布时间】:2015-09-08 11:17:37
【问题描述】:
我有一个类 YouTubeVideo,其中包含一些变量,我想在 UI 上显示这些变量。因此,我创建了一个自定义控件,它显示了该类的所有数据。该类有多个实例,因此我想使用 ItemsControl 在屏幕上显示它们,就像在 StackPanel 中一样。我为 ItemsControl 定义了一个 ViewModel,并将我的窗口代码中的自定义用户控件添加到 ViewModel,但是 ItemsControl 保持为空。
视图模型
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>
从后面的窗口代码中,我在构造函数中将 ItemsControl 的数据上下文设置为 ViewModel:InitializeComponent();
videoInfoList.DataContext = new VideoInfoListModel();
我调试了 ViewModel,我可以看到我的用户控件已成功添加到集合中,PropertyChanged 也会触发。
谢谢
【问题讨论】:
-
尝试将
List更改为ObservableCollection -
@NedStoyanov 请将其添加为答案,就像您首先在哪里一样。谢谢你们!花很多时间在这..