2

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

“不能将类型 '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

4 回答 4

4

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

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 }" />
于 2013-10-09T07:14:05.483 回答
0

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

return (new ObservableCollection(videoresult));
于 2013-10-09T07:14:46.030 回答
0

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

于 2013-10-09T07:16:51.167 回答
0

尝试这个

ObservableCollection<Video> videoresult = new ObservableCollection<Video>();
于 2013-10-09T07:18:11.827 回答