在DataGrid中绑定DependencyProperty.每个列的ElementStyle

本文关键字:ElementStyle DependencyProperty DataGrid 绑定 | 更新日期: 2023-09-27 17:58:13

我的问题看起来很简单,但我解决不了,我花了一天时间…

我有一个DataGrid,我希望能够在每列上启用/禁用TextWrapping。包装是使用控制器中的DependencyProperty启用的。

由于"数据上下文"的原因,我的绑定路径似乎不太好。

什么是好的绑定路径?

以下是代码摘录:

控制器中的DependencyProperty:

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

"ControlerDataConsult"用作XAML页的DataContext。

DataGrid中的Xaml。

<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路径错误:在"对象"DataRowView"(HashCode=4892154)上找不到"SelectDataList_Column0IsWrapping"属性。BindingExpression:Path=(FrameworkElement.DataContext)。SelectDataList_Column0IsWrapping;DataItem='TextBlock'(名称='');目标元素为"TextBlock"(名称=");目标属性是"TextWrapping"(类型为"TextWrappeng")

如果你有任何猜测,你会救我的:)

谢谢,

在DataGrid中绑定DependencyProperty.每个列的ElementStyle

"ControlerDataConsult"用作XAML页的DataContext。

如果是这样的话,你可以尝试这样的相对源绑定:

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