我將WPF ProgressBar
的「不確定」設置爲「真」和「隱藏的可見性」。在事件處理程序中,我試圖在ObservableCollection
正在更新(以及ListSource的ItemsSource爲ObservableCollection
)時使ProgressBar可見。我希望DoEvents(
)從System.Windows.Forms.Application
可以使它可見,但它不。 我注意到SetPBarHelper(() => { ..})
通常比ListView顯示的視覺變化早得多。WPF進度條未顯示
如何使ProgressBar
在事件處理程序代碼中可見?
如何判斷我的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);
}
}
}
}
你爲什麼使用System.Windows.Forms.Application.DoEvents()?這不是一個WinForm的東西嗎? – Aron 2013-03-12 06:54:07
你看過'BackgroundWorker'嗎?如果你把handler()放在BackgroundWorker中,它應該讓你在查詢運行時看到進度條。 – Eirik 2013-03-12 08:21:32