Exemple #1
0
 /// <summary>
 /// Загрузка обновленных компонент.
 /// </summary>
 private void LoadUpdateComponents()
 {
   IRibbonGroup group = RibbonManager.Categories[1].Pages[0].Add("Обновленные компоненты");
   foreach (UpdateComponentInfo info in ((MspModel)Model).UpdateComponents.OrderBy(v => v.Id))
   {
     // Создаем WPF команду и привязываем ее к кнопке.
     // Команда доступна, если выбранный элемент Patch и в нем
     // нет такого же элемента (сравнение по идентификатору).
     ICommand relayCommand = new RelayCommand(
       (param) =>
       {
         Model.AddItem(typeof(WixPatchComponentElement));
         // Меняем у добавленного элемента Id.
         ((WixPatchComponentElement)Model.SelectedItem).Id = info.Id;
       },
       delegate
       {
         bool result = false;
         WixPatchElement element = (SelectedItem ?? Model.RootItem) as WixPatchElement;
         if (element != null)
         {
           result = !element.Items.Select(v => v.Id).Contains(info.Id);
         }
         return result;
       });
     group.Add(info.Id, relayCommand, RibbonButtonType.Small).SetImage(ElementsImagesTypes.Component);
   }
 }
        public MspWizardWindow()
        {
            Settings = new WizardSettingsInfo();
              OkCloseCommand = new RelayCommand(param => OkClose(), (obj) => { return Settings.IsValid; });

              InitializeComponent();

              edtBase.AddHandler(Button.ClickEvent, new RoutedEventHandler(Button_Click));
              edtTarget.AddHandler(Button.ClickEvent, new RoutedEventHandler(Button_Click));

              dialogService = new DialogService(this);
        }
        public MainViewModel()
        {
            // Получение исполняемой сборки для обращения к атрибутам.
              Assembly assembly = Assembly.GetExecutingAssembly();

              // Получение заголовка программы.
              AssemblyTitleAttribute title = (AssemblyTitleAttribute)assembly.
            GetCustomAttributes(typeof(AssemblyTitleAttribute), false)[0];
              applicationTitleBase = title.Title;

              // Получение директории для настроек.
              AssemblyProductAttribute product = (AssemblyProductAttribute)assembly.
            GetCustomAttributes(typeof(AssemblyProductAttribute), false)[0];
              SettingsManager.Directory = Path.Combine(
            Environment.GetFolderPath(Environment.SpecialFolder.LocalApplicationData), "ST", product.Product);
              settingsInfo = new SettingsManager().Load();

              Predicate<object> canExecute = (obj) => { return BuilderViewModel != null; };

              CreateMsiCommand = new RelayCommand(param => CreateBuilder(CreatedBuilderType.Msi, true));
              CreateMspCommand = new RelayCommand(param => CreateBuilder(CreatedBuilderType.Msp, true));
              OpenCommand = new RelayCommand(param => Open());
              SaveCommand = new RelayCommand(param => Save(true), canExecute);
              SaveAsCommand = new RelayCommand(param => Save(false), canExecute);
              CloseCommand = new RelayCommand(param => Close(), canExecute);
              ExitCommand = new RelayCommand(param => Exit());
              SettingsCommand = new RelayCommand(param => ChangeSettings());
              CheckCommand = new RelayCommand(param => Build(true), canExecute);
              BuildCommand = new RelayCommand(param => Build(false), canExecute);

              CreateRibbon();
        }
        public BuilderViewModel(IRibbonManager ribbonManager)
        {
            ribbonTransactionName = Guid.NewGuid().ToString();

              // Начинаем транзакцию Ribbon. Удаление в Dispose()->DisposeUnmanagedResources().
              RibbonManager = ribbonManager;
              RibbonManager.BeginTransaction(ribbonTransactionName);

              // Создаем модель.
              Model = BuilderModelFactory.Create();
              // Все измененные свойства пересылаем View.
              Model.PropertyChanged += (sender, e) => { NotifyPropertyChanged(e.PropertyName); };

              CustomizeRibbon();

              // Удаление выделенного элемента.
              // Используется в TreeListControl в контекстном меню.
              // Запрещаем удаление для элеметов "только чтение".
              RemoveSelectedItemCommand = new RelayCommand(param => RemoveSelectedItem(), (obj) => { return !SelectedItem.IsReadOnly; });
        }
        protected virtual void CustomizeRibbon()
        {
            componentsCategory = RibbonManager.Add("Содержание пакета");
              IRibbonPage componentsPage = componentsCategory.Add("Панель элементов");

              CommandMetadata[] commands = Model.GetElementCommands();
              foreach (IGrouping<string, CommandMetadata> group in commands.GroupBy(v => v.Group))
              {
            IRibbonGroup componentsGroup = componentsPage.Add(group.Key);
            foreach (CommandMetadata command in group)
            {
              // Создаем WPF команду и привязываем ее к кнопке.
              // Команда доступна, если выбранный элемент поддерживает текущий тип (описан в CommandMetadata)
              // и плюс частные условия реализованные в AvailableForRun. Также элемнт должен быть не "Только для чтения".
              ICommand relayCommand = new RelayCommand(param => Model.AddItem(command.WixElementType),
            delegate
            {
              IWixElement element = SelectedItem ?? Model.RootItem;
              return element.AvailableForRun(command.WixElementType, Model.RootItem)
                && !element.IsReadOnly;
            });
              componentsGroup.Add(command.Caption, relayCommand, RibbonButtonType.Small).SetImage(command.ImageType);
            }
              }
        }