Должен ли я использовать триггер или поведение для этого? - PullRequest
0 голосов
/ 05 мая 2010

У меня есть абстрактный объект под названием Кандидат и два разных типа объектов, которые наследуются от Кандидата, под названием Бизнес и Индивидуальный Итак, у меня есть три класса, которые выглядят так:

public abstract class Applicant
{
...
}

public class Individual : Applicant
{
  ...
}

public class Business : Applicant
{
  ...
}

Теперь в DataGrid я хочу показать все детали объекта Applicant. Когда вы выбираете строку, я хочу показать детали бизнеса или отдельного лица как внутреннюю сетку. Как то так

<DataGrid>
     <DataGrid.Columns>
          <!--Show different columns -->
     </DataGrid.Columns>
     <DataGrid.RowDetailsTemplate>
         <!--Show if Individual -->
         <DataGrid>
              <DataGrid.Columns>
                <DataGridTextColumn Header="First Name" ... />
                <DataGridTextColumn Header="Last Name" ... />
              </DataGrid.Columns>
          </DataGrid>
          <!--Show if business -->
          <DataGrid>
              <DataGrid.Columns>
                <DataGridTextColumn Header="Business Name" ... />
                <DataGridTextColumn Header="Tax id" ... />
              </DataGrid.Columns>
          </DataGrid>
     </DataGrid.RowDetailsTemplate>
</DataGrid>

Теперь я не уверен, нужно ли мне использовать Триггеры или Поведения для достижения этой цели? Спасибо за помощь всем! К вашему сведению, я использую Silverlight 4.0 с Prism.

Ответы [ 2 ]

0 голосов
/ 06 мая 2010

Не думаю, что вам нужны ни поведения, ни триггеры, а привязка данных.Существует большое простое введение, связывающее данные в msdn документации .

Уникальность вашей ситуации заключается в том, что у вас нет одной, а две разные DataTemplates для вашей таблицы данных, и вам нужно менять их на лету.Я нашел пост в блоге и ветку форума silverlight.net на эту тему: Изменение шаблонов данных во время выполнения с ВМ и форум .

Первый использует довольно простую логику кода, а тот, кто на форуме, делает то же самое, используя IValueConverter.

0 голосов
/ 05 мая 2010

Я бы не использовал ни того, ни другого:

  • Имеет два представления (сетки) - один отображает индивидуальные данные, другой отображает детали бизнеса.
  • Определите ContentControl внутри RowDetailsTemplate и сделайте его регионом.
  • Затем обработайте изменение SelectedApplicant в вашей ViewModel для основной сетки, чтобы оно активировало правильное представление в регионе в зависимости от типа выбранного кандидата.
...