#wpf #listview
#wpf #listview
Вопрос:
У меня есть этот проект, в котором мне нравится использовать WPF ListView
-
это будет выглядеть как PropertyGrid в Winform. Я уже нашел некоторую реализацию в Интернете, какая из них лучшая?
-
из того, что я узнал, я могу привязать класс только из DependencyObject, возможно ли привязать общий список или словарь, MyClass будет включать имя, значение, тип (string, double, bool, список поиска, …). Как только я его свяжу, он добавит шаблон relate, например, для списка поиска он добавит combobox в celltemplate.
-
кроме того, мне нравится иметь все в файле конфигурации. например, у меня есть эта конфигурация:
Имя1, Значение1, строковоеимя2, Значение2, имя3 bool, Значение3, поиск, N3_option1, N3_option2, N3_option3, …
мой код сначала прочитает файл конфигурации, затем оттуда я прочитаю Name1 / Name2 / Name3 из базы данных, покажу их в своем ListView, из Name3 вы выбираете значение из (N3_option1, N3_option2, N3_option3, …).
Если вы можете указать мне правильное направление, я буду очень признателен.
Обновление: вот 3 примера, на которые я смотрю:
DataTemplates в действии: построение простой сетки свойств, WPF PropertyGrid — методы MVVM, и Сетка свойств WPF.
«Сетка свойств WPF» слишком сложна для новичка вроде меня. Лично мне больше нравятся «DataTemplates в действии: построение простой PropertyGrid».
в нем также есть код для выбора DataTemplate, зависящий от типа данных каждого свойства класса: bool использует BooleanDataTemplate, который является флажком; Enum использует EnumDataTemplate, который является списком.
Я также хотел бы пойти немного дальше, добавить пользовательский тип: lookup, который будет отображаться в виде выпадающего списка, но список значений поступает из базы данных. например
имя свойства: car manufacturere, значение берется из «SELECT LOOKUP_VALUE FROM LOOKUP WHERE LOOKUP_KEY = ‘CAR_MFG'», которое вернет список типа: Toyota, Ford, Nissan, Honda, VW, BMW, …
Если у меня есть> 1 свойства поиска, как я могу их указать? Посмотрите на lookupdatemplate1, посмотрите на lookupdatemplate2, …, затем как указать их в ресурсах XAML. и все DataTemplate предварительно определены в XAML, как я могу это сделать в этом случае.
аналогично EnumToListConverter, как я могу создать LookupmToListConverter1, LookupmToListConverter2?
Ответ №1:
1) Я не уверен, в чем здесь вопрос. Вы можете сделать это с помощью ListView, вопрос только в том, хорошо ли он соответствует вашим данным. Это звучит разумно, учитывая то, что вы написали.
2) Вы можете создать DependencyProperty
, который является списком или словарем, и привязать к нему таким образом. Вы также можете использовать ObservableCollection<T>
класс (в основном список, который уведомляет об изменении его состояния) и привязаться к нему. Вы также можете использовать любой другой класс, который использует INotifyPropertyChanged
, и привязаться к нему. Добавление выпадающего списка через шаблон звучит уместно.
3) Похоже, вам нужен класс, который можно использовать для чтения из вашей конфигурации, а затем отображать его в виде списка. Это будет ваша модель представления. Вы могли бы создать класс, который реализует INotifyPropertyChanged
для этого. У вас должно быть три поля: 1) Имя, 2) Значение, 3) Потенциальные значения. Имя и значение оба будут строками. Я предполагаю, что Name будет односторонней привязкой, а Value будет двусторонней привязкой к combobox, элементы которого привязаны к потенциальным значениям. Затем вы должны создать ObservableCollection<T>
один из этих объектов и привязать свой ListView
к нему. Сериализация и десериализация этой коллекции должны быть относительно простыми.