我的问题似乎很简单,但我解决不了,我已经花了一天就可以了...在DataGrid.ElementStyle绑定一个DependencyProperty为每列
我有一个DataGrid,我想成为能够在每列上启用/禁用TextWrapping。 Wrapping可以使用控制器的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页。
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 path error: 'SelectDataList_Column0IsWrapping' property not found on 'object' ''DataRowView' (HashCode=4892154)'. BindingExpression:Path=(FrameworkElement.DataContext).SelectDataList_Column0IsWrapping; DataItem='TextBlock' (Name=''); target element is 'TextBlock' (Name=''); target property is 'TextWrapping' (type 'TextWrapping')
如果您有任何想你救了我:)
感谢,
该属性所属的类在哪里以及它出现在datagrid的对象模型/层次结构中? (由于它没有在XAML中的任何地方设置) – 2011-06-01 11:49:53
请参阅编辑。希望它能回答你的问题。 – ykatchou 2011-06-01 12:08:36