Я думаю, я бы попытался решить это по-другомуПусть ваш LoginPage обрабатывает только вход, затем вы перенаправляете на свою главную страницу.
В вашей модели представления для главной страницы вы создаете свойство bool, называемое чем-то вроде Loading
, которое вы можете установитьво время вашего асинхронного вызова.Свяжите это с видимым свойством индикатора выполнения, чтобы оно показывало, когда Loading
истинно, используйте конвертер для обработки bool -> visible.Когда данные загружены, вы просто устанавливаете Loading
в false, что приведет к исчезновению индикатора выполнения.В то же время вы также привязываете свойство visible элемента управления / представления к Loading
, но при этом будет использоваться другой преобразователь, который является инвертированным значением преобразователя для индикатора выполнения.
Надеюсь, что это поможет.
ОБНОВЛЕНИЕ: Я пропустил, что у вас уже есть IsDataLoaded
, это на вашей модели представления?Конвертер должен выглядеть примерно так:
public class VisibilityConverter : IValueConverter
{
public object Convert(object value, Type targetType, object parameter,
CultureInfo culture)
{
if (value != null && value is bool && parameter != null)
{
var bValue = (bool) value;
var visibility = (Visibility)Enum.Parse(
typeof (Visibility), parameter.ToString(),true);
if (bValue) return visibility;
return visibility ==
Visibility.Visible ? Visibility.Collapsed : Visibility.Visible;
}
return null;
}
public object ConvertBack(object value, Type targetType, object parameter,
CultureInfo culture)
{
throw new NotImplementedException();
}
}
Затем использовать его так:
Visibility="{Binding IsDownloading, Converter={StaticResource VisibilityConverter}, ConverterParameter=Visible}"
Пример кода взят из: http://dotnetbyexample.blogspot.com/2010/11/converter-for-showinghiding-silverlight.html