【问题标题】:DataGrid Data Binding Issue with Styles样式的 DataGrid 数据绑定问题
【发布时间】:2011-09-15 10:23:21
【问题描述】:

我有一个 WPF DataGrid,我想对所有单元格应用文本换行,所以我定义了这种样式:

        <DataGrid.CellStyle>
            <Style TargetType="DataGridCell">
                <Setter Property="ContentTemplate">
                    <Setter.Value>
                        <DataTemplate>
                            <TextBlock TextWrapping="Wrap" FontSize="15" Text="{Binding}"  VerticalAlignment="Center" 
                                 HorizontalAlignment="Center" ></TextBlock>
                        </DataTemplate>
                    </Setter.Value>
                </Setter>
            </Style>
        </DataGrid.CellStyle>
        <DataGrid.Columns>

            <DataGridTextColumn Header="Name" Binding="{Binding Name}" Width="95" />
            <DataGridTextColumn Header="Address" Binding="{Binding Address}" Width="95"  />
            <DataGridTextColumn Header="Category" Binding="{Binding Category}" Width="95" />

        </DataGrid.Columns>

我在后面的代码中设置了 DataGrid 的 ItemsSource,如下所示:

        myDataGrid.ItemsSource= new Customers[] 
        { 
                new ComputerStandard{Name="Michael Thomas",Address="16 Greenville Avenue",Category="A"},            
                new ComputerStandard{Name="Fiona Thompson",Address="19 Wright Street",Category="F"},            
                new ComputerStandard{Name="Jack Smith",Address="133 Kensington Road",Category="B"},
                new ComputerStandard{Name="Michael jackson",Address="11 Wine Street",Category="C"},
                new ComputerStandard{Name="Jerry Holmes",Address="10 Awson Street",Category="G"},
                new ComputerStandard{Name="David Philips",Address="Not Specified",Category="A"}
        };

但是我以我的风格 Text="{Binding}" 设置的绑定表达式在某处失败了,我最终得到:

显然绑定表达式Text="{Binding}" 失败了,我知道这一点,因为当我删除样式时,一切正常。我该如何解决这个问题?

提前致谢。

【问题讨论】:

    标签: wpf data-binding datagrid


    【解决方案1】:

    设置DataGridColumn.Binding 属性不会为每个DataGridCell 设置DataContextDataContext 仍然等于整个 Row 的 DataContext

    从绑定ContentTemplate切换到绑定Template,然后就可以访问ContentPresenter

    <Setter Property="Template">
        <Setter.Value>
            <ControlTemplate TargetType="DataGridCell">
                <TextBlock TextWrapping="Wrap" FontSize="15" 
                           VerticalAlignment="Center" HorizontalAlignment="Center">
    
                    <ContentPresenter Content="{TemplateBinding Content}" />
    
                </TextBlock>
            </ControlTemplate>
        </Setter.Value>
    </Setter>
    

    【讨论】:

      【解决方案2】:

      这会有所帮助:

      <Style x:Key="MyGrid" TargetType="{x:Type DataGridCell}">    
          <Setter Property="Template">
              <Setter.Value>
                  <ControlTemplate TargetType="{x:Type DataGridCell}">
                     <Border x:Name="MyBorder" >
                        <TextBlock Background="Transparent" TextWrapping="WrapWithOverflow"
                           TextTrimming="CharacterEllipsis" Height="auto" Width="auto"> 
                         <ContentPresenter 
                           Content="{TemplateBinding Property=ContentControl.Content}" 
                           ContentTemplate="{TemplateBinding Property=ContentControl.Content}"/>
                        </TextBlock>
                     </Border>
                  </ControlTemplate>
              </Setter.Value>
          </Setter>
      </Style>
      

      取自here

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2013-12-27
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多