StackOverflow при попытке создать новую модель представления в Caliburn.Micro - PullRequest
0 голосов
/ 19 января 2020

Последние несколько дней я пытался создать новую модель представления и отобразить ее в основном виде оболочки моего приложения. В настоящее время я смог загрузить страницу, используя ActivateItemAsync Однако это занимает всю страницу. Я в настоящее время хочу, чтобы это сидело выше activeitem. Вот представление для страницы:

  <!-- Notification Bar -->
  <UserControl 
            x:Name="NotificationMessage"
            Visibility="{Binding IsNotificationMessageVisible, Converter={StaticResource BooleanToVisibilityConverter}, FallbackValue=collapsed}"
            Grid.Row="0" Grid.Column="1"

            />


        <!-- Main Frame -->
        <Frame 
               x:Name="ActiveItem"  
               NavigationUIVisibility="Hidden" 
               Padding="10"
            Grid.Row="1"
            Grid.Column="1"
               />

Как вы можете видеть сверху, у меня есть две строки, одна из которых представляет собой панель уведомлений, которая появится, если у пользователя есть уведомление. В настоящее время я хочу, чтобы это было скрыто, только если доступно уведомление. Однако я не могу сделать так, чтобы уведомление отображалось на странице. При попытке получить уведомление о переполнении стека из-за его зацикливания. Ниже приведен код ViewModel для представленного выше представления:

private _notificationtMessage;

    public NotificationViewModel NotificationMessage
    {
        get {
            _notificationtMessage= new NotificationViewModel ();
            return _notificationtMessage; 
        }
        set { 
            _notificationtMessage= value;
            NotifyOfPropertyChange(() => NotificationMessage);
            NotifyOfPropertyChange(() => IsNotificationVisible);
        }
    }



    public bool IsNotificationVisible
    {
        get
        {
            bool b = false;
            if(Database.GetNotification().Title.Length !=0)
            {
                b = true;
                this.NotificationMessage = new NotificationViewModel ();
            }
            return b;
        }
    }

Мой главный вопрос - как мне создать новый экземпляр этой модели в моей ShellViewModel и отобразить его в моем ShellView

1 Ответ

1 голос
/ 20 января 2020

Вы не должны создавать объект в геттере. Попробуйте это и убедитесь, что вы определили представление для NotificationViewModel в соответствии с соглашениями:

private NotificationViewModel _notificationtMessage = new NotificationViewModel();
public NotificationViewModel NotificationMessage
{
    get
    {
        return _notificationtMessage;
    }
    set
    {
        _notificationtMessage = value;
        NotifyOfPropertyChange(() => NotificationMessage);
        NotifyOfPropertyChange(() => IsNotificationVisible);
    }
}


public bool IsNotificationVisible
{
    get
    {
        return Database.GetNotification().Title.Length != 0;
    }
}
...