Как автоматически закрыть окно Caliburn Dialog? - PullRequest
0 голосов
/ 01 июня 2018

У меня ViewModel, определенный как

public class PlayerViewModel : Screen, IDiscoverableViewModel

Я показываю всплывающее диалоговое окно как

var result = await _dialogManager.ShowDialogAsync(item, new List<DialogResult>() { DialogResult.Cancel });

Здесь item - это другая ViewModel, которая показывает пользовательский интерфейсиз соответствующего представления.Это всплывающее окно отображает некоторую информацию, и его необходимо автоматически закрыть через несколько секунд, если пользователь не нажмет кнопку «Отмена».

Ниже приведено событие «Таймер таймера», которое срабатывает через 10 секунд.

void timer_Tick(object sender, EventArgs e)
{
    this.DialogHost().TryClose(DialogResult.Cancel);
}

Но это не работает и выдает исключение, так как this.DialoHost () всегда получает значение NULL.Я попытался это решение , но оно закрывает всю ViewModel, вместо этого я хочу закрыть только диалоговое окно.

1 Ответ

0 голосов
/ 05 июня 2018

Не могли бы вы подтвердить, что ваша «всплывающая модель просмотра» получена из Screen?Если это так, TryClose должен работать.Не могли бы вы подтвердить это?Пример кода для закрытия.

public class CreatePersonViewModel:Screen
{

    System.Timers.Timer _timer = new Timer(5000);
    public CreatePersonViewModel()
    {

        _timer.Elapsed += (sender, args) =>
        {
            _timer.Enabled = false;
            TryClose(true);
        };
        _timer.Start();
    }
}
...