private void createStatementEditor(PropertyDescriptorAttribute propertyDescriptor, PropertyInfo propertyInfo, int gridRow) { Button editButton; panelQuestionParams.Children.Add(editButton = new Button { Margin = new Thickness(2), Content = $"{_language.GetExtension<ILanguageBooleanModule>().Questions.Parameters.Statement}: ...", DataContext = Question, }); editButton.SetBinding(FrameworkElement.TagProperty, new Binding { Path = new PropertyPath(propertyInfo.Name), Mode = BindingMode.TwoWay, }); editButton.SetValue(Grid.RowProperty, gridRow); editButton.SetValue(Grid.ColumnProperty, 0); editButton.SetValue(Grid.ColumnSpanProperty, 2); editButton.Click += (sender, args) => { var viewModel = editButton.Tag as StatementViewModel; if (viewModel == null || MessageBox.Show(_language.GetExtension <IWpfUiModule>().Ui.CreateNewStatement, _language.GetExtension <IWpfUiModule>().Common.Question, MessageBoxButton.YesNo, MessageBoxImage.Question) == MessageBoxResult.Yes) { Type statementType = null; var statementTypesDialog = new SelectStatementTypeDialog { Owner = this, }; statementTypesDialog.Initialize(_language, _semanticNetwork); if (statementTypesDialog.ShowDialog() == true) { statementType = statementTypesDialog.SelectedType; } if (statementType == null) { return; } viewModel = (StatementViewModel)_viewModelFactory.CreateByCoreType(statementType, _language); } else { viewModel = viewModel.Clone(); } var editDialog = viewModel.Clone().CreateEditDialog(this, _semanticNetwork, _language); if (editDialog.ShowDialog() == true) { var editor = (Controls.IStatementEditor)((EditDialog)editDialog).Editor; viewModel = editor.Statement; editButton.Tag = viewModel; editButton.Content = viewModel; } }; }
private void createStatementsList(PropertyDescriptorAttribute propertyDescriptor, PropertyInfo propertyInfo, int gridRow) { GroupBox groupBox; panelQuestionParams.Children.Add(groupBox = new GroupBox { Header = _language.Questions.Parameters.Conditions + ":", Margin = new Thickness(2), }); groupBox.SetValue(Grid.RowProperty, gridRow); groupBox.SetValue(Grid.ColumnProperty, 0); groupBox.SetValue(Grid.ColumnSpanProperty, 2); var listBox = new ListBox { DataContext = Question, }; listBox.SetBinding(ItemsControl.ItemsSourceProperty, new Binding { Path = new PropertyPath(propertyInfo.Name), Mode = BindingMode.OneWay, }); var addButton = new Button { Content = "+", Margin = new Thickness(2), Padding = new Thickness(5, 2, 5, 2), }; addButton.Click += (sender, args) => { StatementViewModel viewModel; Type statementType = null; var statementTypesDialog = new SelectStatementTypeDialog { Owner = this, }; statementTypesDialog.Initialize(_language, _semanticNetwork); if (statementTypesDialog.ShowDialog() == true) { statementType = statementTypesDialog.SelectedType; } if (statementType == null) { return; } viewModel = (StatementViewModel)_viewModelFactory.CreateByCoreType(statementType, _language); var editDialog = viewModel.CreateEditDialog(this, _semanticNetwork, _language); if (editDialog.ShowDialog() == true) { ((ICollection <StatementViewModel>)listBox.ItemsSource).Add(viewModel); } }; var deleteButton = new Button { Content = "-", Margin = new Thickness(2), Padding = new Thickness(5, 2, 5, 2), }; deleteButton.Click += (sender, args) => { var statements = listBox.SelectedItems.OfType <StatementViewModel>().ToList(); foreach (var statement in statements) { listBox.Items.Remove(statement); } }; var editButton = new Button { Content = "...", Margin = new Thickness(2), Padding = new Thickness(5, 2, 5, 2), }; editButton.Click += (sender, args) => { var statement = listBox.SelectedItem as StatementViewModel; if (statement == null) { return; } var viewModel = statement.Clone(); var editDialog = viewModel.CreateEditDialog(this, _semanticNetwork, _language); if (editDialog.ShowDialog() == true) { var list = (ObservableCollection <StatementViewModel>)listBox.ItemsSource; list[list.IndexOf(statement)] = viewModel; } }; var stackPanel = new StackPanel { Orientation = Orientation.Vertical, }; stackPanel.SetValue(DockPanel.DockProperty, Dock.Right); stackPanel.Children.Add(addButton); stackPanel.Children.Add(deleteButton); stackPanel.Children.Add(editButton); var dockPanel = new DockPanel { LastChildFill = true, }; dockPanel.Children.Add(stackPanel); dockPanel.Children.Add(listBox); groupBox.Content = dockPanel; }