Καλώς ορίσατε στο dotNETZone.gr - Σύνδεση | Εγγραφή | Βοήθεια

 

Αρχική σελίδα Ιστολόγια Συζητήσεις Εκθέσεις Φωτογραφιών Αρχειοθήκες

Messages should be closed, somehow, manually?

  •  17-02-2011, 19:51

    Messages should be closed, somehow, manually?

    Καλησπέρα σε όλους,

    όπως μου είχε προτείνει ο KelMan(τον ευχαριστώ πολύ) χρησιμοποιώ το mediator Pattern για επικοινωνία μεταξύ viewModel και view.

    λοιπόν,
    στο mainWindow έχω ενα menu όπου σε κάθε item του έχω ορίσει ενα command.
    Όταν κάνω click σε ένα item στέλνω μήνυμα το οποίο το έχω κάνει register στο mainWindow.xaml.cs
    //MainWindow.xaml
    <awc:ImageButton IsToolStyle="True"  Orientation="Vertical" ImageSource="" Command="{Binding ShowPricesWindowCommand}">Prices</awc:ImageButton>
    
    
     //MainWIndow ViewModel
     public ICommand ShowPricesWindowCommand {
            get { return new RelayCommand(ShowPricesWindowExecute); }
        }
    void ShowPricesWindowExecute() {
            Messenger.Default.Send(new NotificationMessage<Hotel>(this, SelectedHotel, "ShowPricesWindow"),
                                   "ShowPricesWindow");
        }
    
    
    //MainWindow.xaml.cs
    Messenger.Default.Register<NotificationMessage<Hotel>>(this, "ShowPricesWindow", HotelPriceMessageReceived);
    
    private void HotelPriceMessageReceived(NotificationMessage<Hotel> selectedHotel) {
            var roomPrices = new RoomPrices();//This view has the RoomPriceViewModel as dataContext
            roomPrices.Show();
            //via messaging I am sending the selectedHotel object
            Messenger.Default.Send(new NotificationMessage<Hotel>(this, selectedHotel.Content, "ShowPricesWindow"),
                                   "ShowPricesWindow2");
        }

    μου ανοίγει το ζητούμενο παράθυρο και μέσα απο το viewModel του(RoomPricesViewModel), κάνω κάποιον έλεγχο και κλείνω το view που είχε ανοίξει και ανοίγω ένα άλλο.

    public RoomPricesViewModel(IDialogService dialogService) {
            this._dialog = dialogService;
            Messenger.Default.Register<NotificationMessage<Hotel>>(this, "ShowPricesWindow2", NotificationMessageReceived);
        }
    
        private void NotificationMessageReceived(NotificationMessage<Hotel> selectedHotel) {
            this.SelectedHotel = selectedHotel.Content;
            LoadRooms();
        }
    
    void LoadRooms() {
            if (rooms.Count == 0) {
                dialogResponse = _dialog.ShowMessage("Display a message;", "", DialogButton.YesNo, DialogImage.Warning);
                switch (dialogResponse) {
                    case DialogResponse.Yes:
                        //close the RoomPrices window and open the RoomTypesWindow
                        Messenger.Default.Send(new NotificationMessage<Hotel>(this, this.SelectedHotel, "CloseWindowAndOpenRoomTypes"), "CloseWindowAndOpenRoomTypes");
                        return;
                        break;
                    case DialogResponse.No:
                        break;
                }
            }
        }
    public RoomPrices() {
                InitializeComponent();
                Messenger.Default.Register<NotificationMessage<Hotel>>(this, "CloseWindowAndOpenRoomTypes", CloseWindowAndOpenRoomTypes);
            }
    
     private void CloseWindowAndOpenRoomTypes(NotificationMessage<Hotel> selectedHotel) {
                if (selectedHotel.Sender == this.DataContext) {
                    this.Close();
                    Messenger.Default.Send(new NotificationMessage<Hotel>(this, selectedHotel.Content, "ShowRoomsWindow"),
                                       "ShowRoomsWindow");
                }
            }

    Αυτή η διαδικάσία λειτουργεί "σωστά" για μία φορά μόνο.

    Αν κλείσω και το δεύτερο παράθυρο που έχει ανοίξει και ξαναπατήσω το item στο menu, τότε η όλη διαδικασία θα επαναληφθεί δύο φορές.

    Το ίδιο συμβαίνει για όσες φορές και αν πατήσω το item.

    Πρέπει τα messages να τα κλείνω με κάποιον τρόπο?

    Ευχαριστώ


    αν δεν το θες, www.antallakseto.gr
    Δημοσίευση στην κατηγορία: ,
Δείτε όλες τις δημοσιεύσεις της Θεματική Ενότητας
Με χρήση του Community Server (Commercial Edition), από την Telligent Systems