【问题标题】:ItemsSource bind to collection stays emptyItemsSource 绑定到集合保持为空
【发布时间】: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 请将其添加为答案,就像您首先在哪里一样。谢谢你们!花很多时间在这..

标签: c# wpf xaml mvvm


【解决方案1】:

为了观察集合中的变化,WPF 提供了实现INotifyCollectionChangedINotifyPropertyChangedObservableCollection 类。将List&lt;T&gt; 替换为ObservableCollection&lt;T&gt;,您的代码应该可以工作了。

【讨论】:

    猜你喜欢
    • 2010-12-10
    • 2012-12-10
    • 1970-01-01
    • 2013-04-11
    • 1970-01-01
    • 2018-07-16
    • 1970-01-01
    • 1970-01-01
    • 2015-02-05
    相关资源
    最近更新 更多