Несколько привязок к столбцу DataGrid - PullRequest
0 голосов
/ 13 августа 2010

Возможно ли привязать два разных данных к одному столбцу DataGrid. Скажем, если у меня есть класс A, у которого есть свойство p1, и у меня есть другой класс B со свойством p2. Можно ли привязать p1 и p2 к одному столбцу таблицы данных?

Ответы [ 3 ]

2 голосов
/ 13 августа 2010

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

1 голос
/ 13 августа 2010

Примерно так:

<StackPanel>
   <TextBlock Text="{Binding ClassAProperty}"/>
   <TextBlock Text="{Binding ClassBProperty}"/>
</StackPanel>

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

Отображение свойств каждого типа в столбцы должно где-то жить, но ононе должен жить в XAML, и это не то, что я бы сказал.Я бы сделал это в моей модели зрения.Предполагая, что у меня еще нет классов модели представления для моих объектов ClassA и ClassB (и я не хочу их создавать), я бы реализовал что-то вроде этого:

public class DataGridHelper
{
   public Wrapper(object o)
   {
      ClassA a = o as ClassA;
      if (a != null)
      {
         Column1 = a.Property1;
         Column2 = a.Property2;
         ...
      }

      ClassB b = o as ClassA;
      if (b != null)
      {
         Column1 = b.Property1;
         Column2 = b.Property2;
         ...
      }

      public object Column1 { get; private set; }
      public object Column2 { get; private set; }
}

...а затем связать столбцы DataGrid с коллекцией объектов DataGridHelper.

Если бы у меня был класс ClassAViewModel и ClassBViewModel, я бы просто реализовал Column1, Column2 и др. Свойства в обоих.Это был бы путь, если бы мне нужно было поддерживать двустороннее связывание и проверку.

1 голос
/ 13 августа 2010

Самый простой способ сделать это, вероятно, MultiBinding.Вот простой пример того, как использовать MultiBinding (который использует свойство StringFormat, которое мне нравится).

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