Привязать свойство DependencyProperty в DataGrid.ElementStyle для каждого столбца. - PullRequest
0 голосов
/ 01 июня 2011

Моя проблема кажется довольно простой, но я не могу ее решить, я потратил на нее один день ...

У меня есть DataGrid, и я хочу иметь возможность включать / отключать TextWrapping накаждый столбец.Обтекание включается с использованием свойства DependencyProperty из контроллера.

Кажется, мой путь привязки не подходит из-за "datacontext".

Каким будет хороший путь привязки?

Вот фрагмент кода:

Свойство DependencyProperty в контроллере:

public class ControlerDataConsult : DependencyObject
{
     public static readonly DependencyProperty SelectDataList_Column0IsWrappingProperty = DependencyProperty.Register("SelectDataList_Column0IsWrapping", typeof(TextWrapping), typeof(ControlerDataConsult), new UIPropertyMetadata(TextWrapping.NoWrap));
}

"ControlerDataConsult" используется как DataContext для страницы XAML.

Xaml в DataGrid.

<dg:DataGrid CanUserSortColumns="False" IsReadOnly="True" Name="SelectedList" SelectionMode="Extended"   SelectionChanged="SelectedList_SelectionChanged"
      HeadersVisibility="Column"  Margin="5,14,5,-4" GridLinesVisibility="all" AutoGenerateColumns="False" ItemsSource="{Binding Path=SelectDataList}"
      BorderThickness="1" BorderBrush="{DynamicResource clBLACK}" Loaded="SelectedList_Loaded" >
      <dg:DataGrid.Columns>
           <dg:DataGridTextColumn Width="50"  Header="" HeaderStyle="{StaticResource DataGridHeaderStyle}" Binding="{Binding Index}"/>
               <dg:DataGridTextColumn Visibility="{Binding (FrameworkElement.DataContext).SelectDataList_Column0IsVisible,  RelativeSource={x:Static RelativeSource.Self},Converter={StaticResource VisibilityConverter}}"
                    Header="{Binding (FrameworkElement.DataContext).SelectDataList_Column0Title, RelativeSource={x:Static RelativeSource.Self}}" 
                    HeaderStyle="{StaticResource DataGridHeaderStyle}" Binding="{Binding Col0}">
                    <dg:DataGridTextColumn.ElementStyle>
                          <Style TargetType="TextBlock">
                               <Setter Property="TextWrapping" Value="{Binding (FrameworkElement.DataContext).SelectDataList_Column0IsWrapping, RelativeSource={x:Static RelativeSource.Self}}" />
                          </Style>
                    </dg:DataGridTextColumn.ElementStyle>
               </dg:DataGridTextColumn>
       </dg:DataGrid.Columns>
</dg:DataGrid>

Если я попробую это: <Setter Property="TextWrapping" Value="True" />, он работает как положено.

Я пробую несколько привязок и могу получить хорошую.

Во время выполнения я получил эту ошибку:

Ошибка пути BindingExpression: свойство 'SelectDataList_Column0IsWrapping' не найдено в 'object' '' DataRowView '(HashCode = 4892154)'.BindingExpression: Path = (FrameworkElement.DataContext) .SelectDataList_Column0IsWrapping;DataItem = 'TextBlock' (Name = '');целевым элементом является TextBlock (Name = '');Свойство target - TextWrapping (тип TextWrapping)

Если у вас есть предположение, вы спасете меня:)

Спасибо,

1 Ответ

1 голос
/ 01 июня 2011

"ControlerDataConsult" используется как DataContext для страницы XAML.

Если это так, вы можете попробовать относительную привязку источника следующим образом:

{Binding RelativeSource={RelativeSource AncestorType=Page}, Path=DataContext.SelectDataList_Column0IsWrapping}
...