Проблема привязки данных в DataGrid со стилями - PullRequest
3 голосов
/ 15 сентября 2011

У меня есть 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>

, и я установил ItemsSource моей DataGrid в своем коде так:

        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}" терпит неудачу, я знаю это, потому что когда я удаляю стиль, все работает отлично.Как мне исправить это?

Заранее спасибо.

Ответы [ 2 ]

2 голосов
/ 15 сентября 2011

Установка свойства DataGridColumn.Binding не устанавливает DataContext для каждого DataGridCell.DataContext по-прежнему равен целому ряду 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>
1 голос
/ 15 сентября 2011

Это поможет:

<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>

Взято из здесь .

...