2013-08-20 1 views
0

Мой оригинальный DataGrid имеет несколько столбцов, в котором граница значение BOOL. [По умолчанию это будет отображаться как флажков]Binding WPF DatagridCell к источнику

Я определил шаблон клеток и может создать

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

Может ли кто-нибудь помочь мне определить, что я делаю неправильно?

<Style x:Key="dgCellBool" TargetType="{x:Type DataGridCell}"> 
      <Setter Property="Template"> 
       <Setter.Value> 
        <ControlTemplate> 
         <Ellipse> 
          <Ellipse.Height>10</Ellipse.Height> 
          <Ellipse.Width>10</Ellipse.Width> 
          <Ellipse.Style> 
           <Style TargetType="Ellipse"> 
            <Style.Triggers> 
             <DataTrigger Binding="{Binding RelativeSource={RelativeSource TemplatedParent},Path=Binding}" Value="True"> 
              <Setter Property="Fill" Value="Red"></Setter> 
             </DataTrigger> 
             <DataTrigger Binding="{Binding RelativeSource={RelativeSource TemplatedParent},Path=Binding}" Value="False"> 
              <Setter Property="Fill" Value="Green"></Setter> 
             </DataTrigger> 
            </Style.Triggers> 
           </Style> 
          </Ellipse.Style> 
         </Ellipse> 
        </ControlTemplate> 
       </Setter.Value> 
      </Setter> 
    </Style> 

Благодаря Раджеш

ответ

0

Вы пытаетесь связать Binding свойство DataGridCell но DataGridCell не имеют каких-либо привязок собственности. Yoy должен установить Path = Column.Binding. DataGridCell имеет свойство Column, которое также имеет свойство привязки.

Binding="{Binding RelativeSource={RelativeSource TemplatedParent},Path=Column.Binding}" 

Надеюсь, это поможет.

+0

Привет, ethicallogics, я попробовал то, что вы предложили, однако он рисует пробел. – Raj

0

Вы должны предоставить ContentPresenter представить содержание и убедитесь, что вы добавляете Border, что вы потеряете от оригинального Template:

<Style TargetType="{x:Type DataGridCell}"> 
    <Setter Property="Template"> 
     <Setter.Value> 
      <ControlTemplate TargetType="{x:Type DataGridCell}"> 
       <Border Background="{TemplateBinding Background}"> 
        <ContentPresenter VerticalAlignment="Center" 
HorizontalAlignment="Center" /> 
       </Border> 
      </ControlTemplate> 
     </Setter.Value> 
    </Setter> 
</Style> 

UPDATE >>>

Если вы хотите, чтобы ваш Ellipse вместо Border, просто добавьте его обратно с помощью Grid ... Ellipse объекты не могут быть размещены:

<Style x:Key="dgCellBool" TargetType="{x:Type DataGridCell}"> 
    <Setter Property="Template"> 
     <Setter.Value> 
      <ControlTemplate TargetType="{x:Type DataGridCell}"> 
       <Grid> 
        <Ellipse Height="10" Width="10"> 
         <Ellipse.Style> 
          <Style TargetType="Ellipse"> 
           <Setter Property="Fill" Value="Red" /> 
           <Style.Triggers> 
            <DataTrigger Binding="{Binding RelativeSource={ 
RelativeSource TemplatedParent}, Path=Binding}" Value="False"> 
             <Setter Property="Fill" Value="Green" /> 
            </DataTrigger> 
           </Style.Triggers> 
          </Style> 
         </Ellipse.Style> 
        </Ellipse> 
        <ContentPresenter VerticalAlignment="Center" 
HorizontalAlignment="Center" /> 
       </Grid> 
      </ControlTemplate> 
     </Setter.Value> 
    </Setter> 
</Style> 
+0

Hiya Sheridan, Хорошо, если я добавлю ContentPresenter, где бы я применил триггеры данных? – Raj

+0

См. Мой обновленный ответ. – Sheridan