2011-06-01 20 views
0

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

如果您有任何想你救了我:)

感謝,

+0

該屬性所屬的類在哪裏以及它出現在datagrid的對象模型/層次結構中? (由於它沒有在XAML中的任何地方設置) – 2011-06-01 11:49:53

+0

請參閱編輯。希望它能回答你的問題。 – ykatchou 2011-06-01 12:08:36

回答

1

The "ControlerDataConsult" is used as DataContext for the XAML Page.

如果是這樣的情況下,你可以嘗試這樣的相對源綁定:

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

我太親密了!我試過這個使用Path = .SelectDataList_Column0IsWrapping :(非常感謝! – ykatchou 2011-06-01 14:11:57

+0

太糟糕了,你浪費了這麼多時間在這個相當簡單的問題,很高興幫助:) – 2011-06-01 14:18:24

+0

非常感謝幫助:) – ykatchou 2011-06-06 07:53:19

相關問題