0

I'm trying to place a usercontrol in a flyout window. In this usercontrol I'm trying to bind a list to a listview, but the listview remains empty.

C# 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 Usercontrol

<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>

XAML flyout

<Grid>
    <local:MusicList x:Name="musicList" />
</Grid>

1 Answers1

0

Use ObservableCollection<T> instead of List<T>. you can write binding in XAML like this. I didn't write irrelevant properties.

<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>

Also you need this property.

public ObservableCollection<MusicFile> Playlist{ get; }  = new ObservableCollection<MusicFile>();
M.kazem Akhgary
  • 18,645
  • 8
  • 57
  • 118