Flyout中Usercontrol中的Listview仍为空

时间:2016-03-03 08:21:40

标签: c# wpf xaml user-controls flyout

我试图将用户控件放在弹出窗口中。在此用户控件中,我尝试将列表绑定到列表视图,但列表视图仍为空。

C#UserControl

sketch.actions[]

XAML Usercontrol

public MusicList()
    {            
        InitializeComponent();                       
    }


    public void Makemusiclist(Inhabitant inhabitant, Wait wait, Rectangle rect)
    {
        musicList.Width = rect.Width;
        musicList.Height = rect.Height;
        lViewMusicFiles.Width = rect.Width - 150;          // place the box on the right plce on any screen
        lViewMusicFiles.Height = rect.Height - 50;

        List<MusicFile> playlist = new List<MusicFile>();                           // get the inhabitants' playlist from his file
        playlist = inhabitant.musicList;
        lViewMusicFiles.DataContext = playlist;
        lViewMusicFiles.ItemsSource = playlist;

        lViewMusicFiles.Items.Refresh();
        musicList.UpdateLayout();

        Dispatcher.BeginInvoke(DispatcherPriority.Loaded, new Action(() =>
        {
            wait.Close();
        }));
    }

XAML弹出

<Grid>

        <ListView x:Name="lViewMusicFiles" HorizontalAlignment="Left" VerticalAlignment="Top" Background="Red" Foreground="White" FontSize="32" Margin="150,50,0,0" ScrollViewer.VerticalScrollBarVisibility="Auto" SelectionMode="Single" SelectionChanged="lViewMusicFiles_SelectionChanged"  Style="{DynamicResource ListViewStyle1}" >
        <ListView.View>
            <GridView>
                <GridViewColumn Header="Titel" Width="Auto" DisplayMemberBinding="{Binding Path=title}"/>
                <GridViewColumn Header="Artist" Width="Auto" DisplayMemberBinding="{Binding Path=artist}"/>
                <GridViewColumn Header="Album" Width="Auto" DisplayMemberBinding="{Binding Path=album}"/>
            </GridView>
        </ListView.View>
    </ListView>

</Grid>
</UserControl>

1 个答案:

答案 0 :(得分:0)

使用ObservableCollection<T>代替List<T>。你可以像这样在XAML中编写绑定。我没有写不相关的属性。

<ListView x:Name="lViewMusicFiles" ItemsSource="{Binding Playlist, RelativeSource={RelativeSource FindAncestor, AncestorType={x:Type Window}}}">
    <ListView.View>
        <GridView>
            <GridViewColumn Header="Titel" DisplayMemberBinding="{Binding title}"/>
            <GridViewColumn Header="Artist" DisplayMemberBinding="{Binding artist}"/>
            <GridViewColumn Header="Album" DisplayMemberBinding="{Binding album}"/>
        </GridView>
    </ListView.View>
</ListView>

你也需要这个属性。

public ObservableCollection<MusicFile> Playlist{ get; }  = new ObservableCollection<MusicFile>();