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);
}
}
}
}