C # / WPF - создать интерфейс для ввода параметров метода - PullRequest
0 голосов
/ 21 марта 2011

Доброе утро,

У меня есть динамический набор методов, которые имеют одинаковый тип возврата ResultSet.У меня есть пользовательский интерфейс для отображения ResultSet, поэтому остается предоставить пользовательский интерфейс для параметризации методов.Например, у меня могут быть следующие методы:

public ResultSet FindNew (DateTime date, int id)
public ResultSet FindOld (DateTime date, int id)
public ResultSet FindMerged (DateTime date, int[] id)
public ResultSet FindNew (DateTime date, string name)

Я хочу использовать отражение, чтобы обеспечить раскрывающийся список всех методов с правильным типом возврата в классе.После выбора я хотел бы создать форму ввода, необходимую для параметризации метода.Затем пользователь должен иметь возможность отправить запрос и либо просмотреть результаты, либо получить информацию об ошибке, которая произошла.

Я думаю, что могу реализовать эту функцию наивно, используя свои знания C #, но я надеялся, что таммогут быть особенности WPF, которые могли бы помочь в моем поиске.

РЕДАКТИРОВАТЬ

Извинения за слишком широкий вопрос.

Учитываяпроизвольно IEnumerable из ParameterInfo[] как бы вы связали это с вашим представлением, чтобы создать форму, чтобы пользователь мог вводить значение для каждого параметра?

В частности, не прерывая MVVM, если это возможно.Я вижу следующие проблемы:

  • Отображение ParameterInfo в Label и компонент ввода данных, относящийся к его типу
  • Привязка компонента ввода данных к чему-либо в ViewModel так, чтобыможно использовать значение

В данный момент я рассматриваю возможность использования пользовательского типа или кортежа ParameterInfo и текущего значения для этого параметра.Затем я мог бы использовать DataTemplates, чтобы показать правильный компонент ввода данных (DatePicker Vs. TextBox Vs. ComboBox).

NB В winforms это было достигнуто с помощью PropertyGrid ,есть проект с открытым исходным кодом WPF, пытающийся достичь того же, но я бы предпочел использовать свою собственную реализацию из-за ограничений проекта с точки зрения зависимостей.

Ответы [ 2 ]

1 голос
/ 22 марта 2011

Если ваш вопрос:

  1. Предоставлен список функций с аналогичный тип возврата (список может быть изменено)
  2. Построить правильный вход контроль (или набор входных данных элементы управления) для типов параметров в каждая функция
  3. Переданные собранные значения в этих входных элементах управления обратно в вызов каждой функции
  4. Дисплей результат от каждой функции

Вы, наверное, смотрите на слишком большой динамизм здесь. Вы можете создать свои элементы управления в коде (что, вероятно, не то, что вам нужно, потому что вы указали привязку), или вы можете рассмотреть следующий алгоритм (если у вас есть только один параметр для каждой функции):

  1. Для каждой функции построить объект. Он должен иметь ряд логических свойств, каждое из которых соответствует каждому типу элемента управления вводом. Например, UseCheckBox, UseNumericSpinner, UseIntArray, самое большее одно из этих свойств может быть истинным в любой момент времени и т. Д. Или вы можете использовать одно свойство Enum. Эти свойства, очевидно, должны основываться на типе параметра функции.
  2. В вашем XAML вы создаете контейнер основных элементов для функций
  3. Создание пользовательского элемента управления, содержащего все возможные типы элементов управления вводом (числовые счетчики, указатели даты, текстовые поля, ползунки и т. Д.)
  4. Поместите этот пользовательский элемент управления в шаблон данных элемента управления вашими основными элементами
  5. Привязать видимость каждого элемента управления вводом к соответствующему логическому свойству (например, CheckBox.Visibility должен быть привязан к UseCheckBox). Вам может понадобиться использовать специальный конвертер для преобразования логических значений в значения Visilbility. Или, если вы используете свойство enum, свяжите со значением enum.
  6. Привязать список объектов к контексту данных элемента управления

В этом методе, когда вы связываете свой список объектов с элементом управления, он создает список пользовательских элементов управления, по одному для каждой функции. При каждом пользовательском элементе управления привязка автоматически обеспечивает видимость только одного элемента управления вводом.

0 голосов
/ 22 марта 2011

Не совсем понятно, чего вы хотите.Вы хотите динамически создавать элементы управления вводом на основе параметров набора функций?

Если бы это было так, как бы я это сделал:

  1. Есть один классопределяется на основе каждого (их) типа (ов) параметров.
  2. Все эти классы должны реализовывать интерфейс или наследовать от базового класса с методом, который указывает тип создаваемого элемента управления.
  3. Ваш IEnumerable долженсодержит список этих классов
  4. Вы либо динамически создаете свои элементы управления, циклически проходя через эти классы и создавая новый элемент управления вводом на основе каждого типа, либо
  5. Вы связываете коллекцию с DataContext объектаЭлемент контейнера items и шаблон item элемента должны содержать составной пользовательский элемент управления, содержащий все возможные формы элементов управления вводом, но только один виден одновременно в зависимости от параметра типа;значение пользовательского элемента управления может быть значением видимого элемента управления вводом
  6. Когда вы получаете значения из всех этих элементов управления вводом, передайте их обратно в общий абстрактный метод Find, который принимает объект, но выполняет проверку типав реализации переопределения каждого класса
...