【问题标题】:Cannot implicitly convert type 'System.Collections.Generic.List to 'System.Collections.ObjectModel.ObservableCollection无法将类型'System.Collections.Generic.List 隐式转换为'System.Collections.ObjectModel.ObservableCollection
【发布时间】:2013-10-09 07:12:33
【问题描述】:

我正在尝试返回集合并将其分配给列表框,但出现以下错误

"无法将类型 'System.Collections.Generic.List 隐式转换为 'System.Collections.ObjectModel.ObservableCollection"

我是 WPF 和 C# 的新手,我不知道如何处理这个问题。

我要做的就是将“我的视频”文件夹中的所有视频加载到包含媒体元素控件的列表框中。

返回的正确方法是什么?

代码:

public class Video 
{
    public Uri SourceUri { get; set; }

    public static ObservableCollection<Video> LoadVideoInfo()
    {
        List<Video> videoresult = new List<Video>();

            foreach (string filename in
            System.IO.Directory.GetFiles(
            Environment.GetFolderPath(
            Environment.SpecialFolder.MyVideos)))

            videoresult.Add(new Video { SourceUri = new UriBuilder(filename).Uri });

        return videoresult;
    }
}

XAML:

<ListBox x:Name="VideoList" ItemsSource="{Binding }" Width="auto" Height=" auto" Margin="5,0,5,2" Grid.ColumnSpan="2" >
    <ListBox.ItemTemplate>
        <DataTemplate>
            <MediaElement Source="{Binding SourceUri}" />
        </DataTemplate>
    </ListBox.ItemTemplate>
</ListBox>

【问题讨论】:

    标签: c# wpf xaml listbox


    【解决方案1】:

    你的方法说它返回一个ObservableCollection&lt;Video&gt;,但你返回一个List&lt;Video&gt;。 创建一个ObservableCollection&lt;Video&gt; 并返回它。

    return new ObservableCollection<Video>(videoresult);
    

    多个数据上下文:

    上下文模型

    public class ContextModel
    {
        public ObservableCollection<Video> Videos { get; set; }
        public object OtherContext { get; set; }
    }
    

    主窗口

    this.DataContext = new ContextModel()
    {
        Videos = Video.LoadVideoInfo(),
        OtherContext = LoadOtherContext()
    };
    

    Xaml 主窗口

    <ListBox x:Name="VideoList" ItemsSource="{ Binding Videos }" />
    <ListBox x:Name="OtherListBox" ItemsSource="{ Binding OtherContext }" />
    

    【讨论】:

    • 谢谢你这解决了错误,但我无法将视频加载到列表框中,我在这里发布 xaml 部分,请帮助
    • 你的 ItemSource 被定义为 '{ Binding }' 什么是 datacontext?
    • 这是数据上下文 DataContext = Video.LoadVideoInfo();
    • 我创建了一个小型测试应用程序,但没有出现错误。 (除非您有超过 1 个视频(它们都同时开始播放:p)
    • @badrulmuneer 我的工作测试应用可以在my skydrive找到
    【解决方案2】:

    试试这个

    ObservableCollection<Video> videoresult = new ObservableCollection<Video>();
    

    【讨论】:

      【解决方案3】:

      在return语句中,使用以下代码。

      return (new ObservableCollection(videoresult));
      

      【讨论】:

        【解决方案4】:

        你应该改变返回类型,返回类型应该是 ObservableCollection 而不是 List。

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2021-11-22
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多