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

时间:2013-10-09 07:12:34

标签: c# wpf xaml listbox

我正在尝试返回集合并将其分配给列表框但我收到了以下错误

  

“无法将类型'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>

4 个答案:

答案 0 :(得分:2)

您的方法说它返回ObservableCollection<Video>,但您返回List<Video>。 创建一个ObservableCollection<Video>并将其返回。

return new ObservableCollection<Video>(videoresult);

Multieple DataContexts:

ContextModel

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 }" />

答案 1 :(得分:0)

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

return (new ObservableCollection(videoresult));

答案 2 :(得分:0)

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

答案 3 :(得分:0)

试试这个

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