/// <summary>
 /// Raises the ClientExitedChannel event
 /// </summary>
 private void RaiseClientExitedChannel(GW2PAO.TS3.Data.ClientEventArgs args)
 {
     if (this.ClientExitedChannel != null)
         this.ClientExitedChannel(this, args);
 }
 /// <summary>
 /// Raises the TextMessageReceived event
 /// </summary>
 private void RaiseTextMessageReceived(GW2PAO.TS3.Data.TextMessageEventArgs args)
 {
     if (this.TextMessageReceived != null)
         this.TextMessageReceived(this, args);
 }
 /// <summary>
 /// Raises the TalkStatusChanged event
 /// </summary>
 private void RaiseTalkStatusChanged(GW2PAO.TS3.Data.TalkStatusEventArgs args)
 {
     if (this.TalkStatusChanged != null)
         this.TalkStatusChanged(this, args);
 }
 /// <summary>
 /// Raises the ChannelAdded event
 /// </summary>
 private void RaiseChannelUpdated(GW2PAO.TS3.Data.ChannelEventArgs args)
 {
     if (this.ChannelUpdated != null)
         this.ChannelUpdated(this, args);
 }
 /// <summary>
 /// Raises the NewServerInfo event
 /// </summary>
 private void RaiseNewServerInfo(GW2PAO.TS3.Data.NewServerInfoEventArgs args)
 {
     if (this.NewServerInfo != null)
         this.NewServerInfo(this, args);
 }
        /// <summary>
        /// Default constructor
        /// </summary>
        /// <param name="dungeon">The dungeon information</param>
        /// <param name="dungeonsController">The dungeons controller</param>
        /// <param name="browserController">The browser controller object for displaying wiki information</param>
        /// <param name="userData">The dungeon user settings</param>
        public DungeonViewModel(GW2PAO.API.Data.Entities.Dungeon dungeon, IDungeonsController dungeonsController, IWebBrowserController browserController, DungeonsUserData userData)
        {
            this.DungeonModel = dungeon;
            this.userData = userData;

            // Initialize the path view models
            this.Paths = new ObservableCollection<PathViewModel>();
            foreach (var path in this.DungeonModel.Paths)
            {
                this.Paths.Add(new PathViewModel(path, dungeonsController, browserController, this.userData));
            }

            this.RefreshVisibility();
            this.userData.PropertyChanged += (o, e) => this.RefreshVisibility();
            this.userData.HiddenDungeons.CollectionChanged += (o, e) => this.RefreshVisibility();
        }