0

WPFProgressBarの Is indeterminate を True に、Visibility を Hidden に設定しました。イベントハンドラーで、更新中に ProgressBar を表示しようとしていますObservableCollection(および ItemsSource が である ListView ObservableCollection)。DoEvents() fromで表示できることを願っSystem.Windows.Forms.Applicationていますが、そうではありません。SetPBarHelper(() => { ..} ) 私は通常、ListView が視覚的な変化を示すよりもずっと早く終了することに気付きました。

ProgressBarイベント ハンドラー コード内で Visibleを作成するにはどうすればよいですか?

アイテムの追加が完了しListViewたにもかかわらず、まだ更新中かどうかを確認するにはどうすればよいですか?ObserableCollection

<ProgressBar x:Name="GeneralProgressBar" Width="300" Height="15" IsIndeterminate="True" Visibility="Hidden"/>

private void SetPBar(bool isVisible)
{
    if (isVisible)
        GeneralProgressBar.Visibility = System.Windows.Visibility.Visible;
    else
        GeneralProgressBar.Visibility = System.Windows.Visibility.Hidden;
}

private void SetPBarHelper(Action handler)
{
    SetPBar(true);                // try to make ProgressBar visible
    System.Windows.Forms.Application.DoEvents();
    handler();                    // use the event handling, which run database query
    SetPBar(false);               // try to make ProgressBar disappear
}


private void CommandForumImagesBinding_Executed(object sender, ExecutedRoutedEventArgs e)
{
    SetPBarHelper(() =>
    {
        if (e.Parameter == null)
            return;
        var vm = e.Parameter as ForumViewModel;
        if (vm != null)
        {

        }
    });
}

public sealed class ImageGroupCollection : ObservableCollection<ImageGroup>
{
    public ImageGroupCollection() : base() { }

    public void Update(DateTime start, DateTime end)
    {
        ClearItems();
        var list = MyDatabase.GetRecords(start, end);
        if (list != null)
        {
            foreach (var g in list)
            {
                Add(g);
            }
        }
    }
}
4

1 に答える 1