/// <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); } } }