Изменить свойство из обработчика событий - PullRequest
0 голосов
/ 06 марта 2012

Я хочу, чтобы индикатор выполнения отображался до завершения загрузки.

Для этого я связываю свойство «Видимость» с атрибутом «loadBarVisibility».

XAML код:

<ProgressBar Visibility="{Binding loadBarVisibility}" IsIndeterminate="True"/>

Код модели представления:

public class MainViewModel : ViewModelBase
{
    public static Visibility loadBarVisibility { get; set; }
    private const String URL = "myurl";


    public MainViewModel()
    {

        loadFlux();


        if (IsInDesignMode)
        {
            // Code runs in Blend --> create design time data.
        }
        else
        {
            // Code runs "for real"
        }
    }


    public static void loadFlux()
    {
        loadBarVisibility = Visibility.Visible;

        WebClient client = new WebClient();
        client.DownloadStringAsync(new Uri(URL));
        client.DownloadStringCompleted += new DownloadStringCompletedEventHandler(test_downloadFinished);



    }


    public static void test_downloadFinished(object sender, DownloadStringCompletedEventArgs e)
    {
        if (e.Error == null)
        {

            loadBarVisibility = Visibility.Collapsed;

        }

    }

}

Но приведенный выше код не работает: индикатор выполнения все еще виден.

В противном случае, , когда я добавлю «loadBarVisibility = Visibility.Collapsed;» сразу после "client.DownloadStringCompleted + = new DownloadStringCompletedEventHandler (test_downloadFinished);", это работает.

Есть ли способ решить мою проблему?

Большое спасибо.

1 Ответ

2 голосов
/ 06 марта 2012

В вашей ViewModel должен быть реализован интерфейс INotifyPropertyChanged, чтобы уведомить вас о том, что вы видите, что свойство visiblilty было изменено (http://msdn.microsoft.com/en-us/library/system.componentmodel.inotifypropertychanged.aspx)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...