加载ListView / ListBox / GridView的动画 - WPF

时间:2017-01-26 10:19:08

标签: wpf

我的应用程序中有一个Listview,我需要绑定超过1000个项目。在获取数据时,我能够向用户显示一条消息,说明"提取项目...."。一旦获取数据完成"提取项目。"消息消失了,一段时间后我的数据显示在列表视图中。

基本上消息在数据绑定时间内消失。所以我的问题是,我怎样才能显示"取物品......"消息,直到我的listview完成所有项目的绑定?

任何人都可以建议我如何实现这一点。

提前感谢。

1 个答案:

答案 0 :(得分:0)

您可以通过将ListView和TextBlock放入网格来实现此目的。并使用可见性在它们之间切换。使用任务获取项目,然后在任务完成时显示ListView。

的Xaml:

<Grid>
            <TextBlock Text="yourText" Visibility="{Binding TextBlockVisibility}" HorizontalAlignment="Center"/>
            <ListView ItemsSource="{Binding yourItems}" Visibility="{Binding ListViewVisibility}">
                <ListView.ItemsPanel>
                    <ItemsPanelTemplate>
                        <StackPanel></StackPanel>
                    </ItemsPanelTemplate>
                </ListView.ItemsPanel>
            </ListView>
        </Grid>

和您的ViewModel:

        private Visibility _textBlockVisibility;

        public Visibility TextBlockVisibility
        {
            get { return _textBlockVisibility; }
            set
            {
                _textBlockVisibility = value;
                RaisePropertyChanged();
            }
        }

        private Visibility _listViewVisibility;

        public Visibility ListViewVisibility
        {
            get { return _listViewVisibility; }
            set
            {
                _listViewVisibility = value;
                RaisePropertyChanged();
            }
        }

        private async void StartFetchItems()
        {
            ShowTextBlock();
            await Task.Factory.StartNew(FetchItemsAsync).ContinueWith(task2=>ShowListView());
        }

        private async Task FetchItemsAsync()
        {
           ....fetchyourItems 
        }

        private void ShowTextBlock()
        {
            TextBlockVisibility=Visibility.Visible;
            ListViewVisibility=Visibility.Collapsed;
        }

        private void ShowListView()
        {
            ListViewVisibility=Visibility.Visible;
            TextBlockVisibility=Visibility.Collapsed;
        }