WPF - привязка в зависимости от типа объекта члена? - PullRequest
1 голос
/ 20 июля 2009

Допустим, модель выглядит следующим образом: (растения проще описать, чем аббревиатуры системы телефонии)

class CornAttribs
    dim numKernels

class OnionAttribs
    dim numLayers
    dim color

class Vegetable
    Implements INotifyPropertyChanged
    ....snip notify related stuff
    dim name as string
    dim attrib as object  'point to Corn or Onion

Во время выполнения данные могут выглядеть следующим образом:

Vegetables:
    "corn1", numKernels = 60
    "onion1", layers = 10, color = white
    "corn2", numKernels = 80

В моей форме я хочу иметь сетку, которая привязана к CollectionView для отображения определенных именованных овощей. Допустим, в этом примере нет фильтра для представления, но он может быть. Я хочу, чтобы вывод сетки выглядел так:

===========================
Onion   |  Layers  | Color
--------------------------
onion1  |     10   | white
===========================
Corn   |  Kernels  
--------------------------
corn1  |     60 
corn2  |     80
==========================

Существует ограниченное количество объектов "attrib", поэтому я хотел бы иметь разметку для каждой сетки.

Можно ли продолжать идти по этому пути, или если мне нужно, чтобы все 3 объекта были коллекциями, имели атрибут name в каждом и удаляли член attrib в Vegetable? (это моя текущая реализация, однако код «Модель» может быть упрощен, если я смогу использовать выше)

Мой вопрос сводится к следующему: может ли WPF при каждом изменении типа объекта, на который указывает элемент attrib, переключать определения столбцов сетки, а также отображать новый заголовок?

Заранее спасибо.

Ответы [ 2 ]

4 голосов
/ 20 июля 2009

Да.

Ознакомьтесь с этой статьей Dr. WPF в разделе «Использование шаблона данных для конкретного типа». Это довольно легко реализовать. http://www.drwpf.com/blog/Home/tabid/36/EntryID/24/Default.aspx

1 голос
/ 21 июля 2009

Нет, нет, абсолютно нет.

DataGrid может задавать только одну строку заголовка и один столбец. Он просто не поддерживает функцию, которую вы хотите.

Это одинаково для DataGrid и ListView.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...