Список в Usercontrol во Flyout остается пустым

Я пытаюсь поместить usercontrol в всплывающее окно. В этом пользовательском контроле я пытаюсь привязать список к просмотру списка, но просмотр списка остается пустым.

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 выпадающий

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

1 ответ

Использование 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>();
Другие вопросы по тегам