我的問題似乎很簡單,但我解決不了,我已經花了一天就可以了...在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