2013-08-20 81 views
0

我原來的DataGrid中確實有幾列,其中,綁定的值是布爾。[默認情況下,這將顯示爲複選框]綁定WPF DatagridCell到源

我已經定義了一個電池模板,並可以創建

我想爲此使用一個通用的datagrid控件模板,就像下面定義的一樣。 但是它沒有帶來綁定值 - 它顯示爲空白。

有人可以幫我發現我做錯了什麼嗎?

<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

您正在嘗試DataGridCell但DataGridCell的綁定屬性綁定不具有任何綁定屬性。你應該設置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