示例#1
0
        public StreetsViewModel()
        {
            MOYABAZAEntities model = App.MOYABAZA;

            model.Улицы.Load();
            Streets = CollectionViewSource.GetDefaultView(model.Улицы.Local);

            AddModeCommand = new RelayCommand(
                (param) =>
            {
                SelectedStreet = null;
                EditAllowed    = true;
                //model.Города.Local.Add(city);
            },
                (param) => App.ActiveUser.Пользователи_Объекты.Count(uo => uo.Объекты.SName == Constants.StreetThesaurusName && uo.W == 1) != 0);

            ChangeModeCommand = new RelayCommand(
                (param) =>
            {
                EditAllowed ^= true;
            },
                (param) => App.ActiveUser.Пользователи_Объекты.Count(uo => uo.Объекты.SName == Constants.StreetThesaurusName && uo.E == 1) != 0 && param != null);

            SaveCommand = new RelayCommand(
                (param) =>
            {
                if (SelectedStreet != null)
                {
                    if (StreetTextBox != String.Empty)        //Изменение существующего города
                    {
                        try
                        {
                            SelectedStreet.Название = StreetTextBox;
                            model.SaveChanges();
                            Streets.Refresh();
                            EditAllowed = false;
                        }
                        catch (Exception e)
                        {
                            MessageBox.Show($"Такая улица уже существует! \n {e.Message}");
                        }
                    }
                    else
                    {
                        MessageBox.Show("Название не может быть пустым!");
                        StreetTextBox = SelectedStreet.Название;
                    }
                }
                else
                {
                    if (StreetTextBox != String.Empty)        //Добавление нового города
                    {
                        Улицы street = new Улицы();
                        try
                        {
                            street.Название = StreetTextBox;
                            model.Улицы.Local.Add(street);
                            model.SaveChanges();
                            EditAllowed   = false;
                            StreetTextBox = String.Empty;
                        }
                        catch (DbUpdateException e)
                        {
                            model.Улицы.Local.Remove(street);
                            MessageBox.Show($"Такая улица уже существует! \n {e.Message}");
                        }
                    }
                    else
                    {
                        MessageBox.Show("Название не может быть пустым!");
                    }
                }
            },
                (param) => App.ActiveUser.Пользователи_Объекты.Count(uo => uo.Объекты.SName == Constants.StreetThesaurusName && (uo.E == 1 || uo.R == 1)) != 0 && Convert.ToBoolean(param) == true);

            DeleteCommand = new RelayCommand(
                (param) =>
            {
                if (MessageBox.Show("Уверен?", "Назад дороги не будет", MessageBoxButton.YesNo, MessageBoxImage.Question, MessageBoxResult.No) == MessageBoxResult.Yes)
                {
                    var deletedStreet = _selectedStreet;

                    try
                    {
                        if (deletedStreet.Читатели.Count != 0)
                        {
                            throw new DbUpdateException("В улице есть читатели!!!!");
                        }
                        model.Улицы.Local.Remove(deletedStreet);
                        model.SaveChanges();
                    }
                    catch (DbUpdateException ex)
                    {
                        model.Улицы.Local.Add(deletedStreet);
                        Streets.MoveCurrentTo(deletedStreet);
                        Streets.Refresh();
                        MessageBox.Show($"Произошла ошибка при удалении данных: {Environment.CommandLine}{ex.Message}", "Ошибка!", MessageBoxButton.OK, MessageBoxImage.Error);
                    }
                }
            },
                (param) => App.ActiveUser.Пользователи_Объекты.Count(uo => uo.Объекты.SName == Constants.StreetThesaurusName && uo.D == 1) != 0 && param != null);
            Streets.Filter = FilterFunction;
        }