【问题标题】:Listview in Usercontrol in Flyout remains emptyFlyout 中的 Usercontrol 中的 Listview 保持为空
【发布时间】:2016-06-16 10:59:57
【问题描述】:

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

C# 用户控件

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>

XAML 浮出控件

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

【问题讨论】:

    标签: c# wpf xaml user-controls flyout


    【解决方案1】:

    使用ObservableCollection&lt;T&gt; 代替List&lt;T&gt;。您可以像这样在 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>();
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-05-13
      • 2011-08-16
      • 1970-01-01
      • 1970-01-01
      • 2010-12-17
      相关资源
      最近更新 更多