WP7プロジェクトでパフォーマンスプログレスバーを使用しようとしていますが、非同期Webクライアント呼び出しで問題が発生します。私のコードは次のとおりです。
アップデート
public MainPage()
{
InitializeComponent();
...................
this.Loaded += new RoutedEventHandler(MainPage_Loaded);}
private void MainPage_Loaded(object sender, RoutedEventArgs e)
{
if (!App.ViewModel.IsDataLoaded)
{
App.ViewModel.LoadData();
}
}
そして、LoadData関数を実装するViewModel
private bool _showProgressBar = false;
public bool ShowProgressBar
{
get { return _showProgressBar; }
set
{
if (_showProgressBar != value)
{
_showProgressBar = value;
NotifyPropertyChanged("ShowProgressBar");
}
}
public void LoadData()
{
try
{
string defaulturl = "http://....";
WebClient client = new WebClient();
Uri uri = new Uri(defaulturl);
client.DownloadStringCompleted += new DownloadStringCompletedEventHandler(client_DownloadStringCompleted);
ShowProgressBar = true;
client.DownloadStringAsync(uri);
}
catch (Exception ex)
{
MessageBox.Show(ex.Message);
}
this.IsDataLoaded = true;
}
void client_DownloadStringCompleted(object sender, DownloadStringCompletedEventArgs e)
{
try
{
//fetch the data
ShowProgressBar = false;
}
}
catch (Exception ex)
{
MessageBox.Show(ex.Message);
}
}
public event PropertyChangedEventHandler PropertyChanged;
private void NotifyPropertyChanged(String propertyName)
{.....
}
MainPage Xaml
<toolkit:PerformanceProgressBar Margin="0,-12,0,0" x:Name="performanceProgressBar" IsIndeterminate="true" Visibility="{Binding ShowProgressBar, Converter={StaticResource BooleanToVisibilityConverter}}"/>
私の問題は、WebClientは実行時に非同期メソッドであるため、LoadDataがすでに実行されており、performanceProgressBar.Visibilityを配置する場所がわからないことです。
どんな助けでもいただければ幸いです。ありがとう!