在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")
如果你有任何猜测,你会救我的:)
谢谢,
"ControlerDataConsult"用作XAML页的DataContext。
如果是这样的话,你可以尝试这样的相对源绑定:
{Binding RelativeSource={RelativeSource AncestorType=Page}, Path=DataContext.SelectDataList_Column0IsWrapping}