2013-01-16 160 views
0

我有一個DataGrid的ItemsSource屬性綁定到我的ViewModel的屬性!wpf綁定在模板和ItemsSource屬性

<DataGrid ItemsSource="{Binding Path=ExcelData}" ColumnHeaderStyle="{DynamicResource ColumnHeaderStyle}" Grid.Row="1" Margin="0 10 0 10" Visibility="{Binding DisplayGridView, Converter={StaticResource booltovisibility}}" CanUserReorderColumns="False" CanUserResizeColumns="False" CanUserSortColumns="False" /> 

正如你所看到的,DataGrid有一個特殊的頭文件模板。

<Style x:Key="ColumnHeaderStyle" TargetType="{x:Type DataGridColumnHeader}"> 
     <Setter Property="VerticalContentAlignment" Value="Center" /> 
     <Setter Property="Background" Value="{x:Static pm:MetroColors.FeatureBrush}" /> 
     <Setter Property="Foreground" Value="White" /> 
     <Setter Property="Template"> 
      <Setter.Value> 
       <ControlTemplate TargetType="DataGridColumnHeader"> 
        <Border BorderThickness="2" CornerRadius="5" Background="{x:Static pm:MetroColors.FeatureBrush}" BorderBrush="{x:Static pm:MetroColors.FeatureBrush}"> 
         <StackPanel> 
          <ComboBox ItemsSource="{Binding ComboDataSource}" DisplayMemberPath="Text" SelectedValuePath="Name" ext:ComboBoxExtensions.ComboBoxName="{TemplateBinding Content}" SelectionChanged="ComboBox_SelectionChanged" /> 
          <Label Content="{TemplateBinding Content}" /> 
         </StackPanel> 
        </Border> 
       </ControlTemplate> 
      </Setter.Value> 
     </Setter> 
    </Style> 

問題:未填充組合框。

我有這樣的輸出:

System.Windows.Data Error: 40 : BindingExpression path error: 'ComboDataSource' property not found on 'object' ''String' (HashCode=752763509)'. BindingExpression:Path=ComboDataSource; DataItem='String' (HashCode=752763509); target element is 'ComboBox' (Name=''); target property is 'ItemsSource' (type 'IEnumerable') 

我同意呢!綁定到columnheader的對象上沒有名爲ComboDataSource的屬性。

如何將我的組合框綁定到不同的源?

回答

1

您可以通過遍歷樹找到另一個合適的來源,對於可以使用的RelativeSource標記與FindAncestor這樣

ItemsSource="{Binding RelativeSource={RelativeSource FindAncestor, AncestorType={x:Type DataGrid}}, Path=DataContext.ComboDataSource}" 

當然,這意味着有在ComboBox和的祖先DataGrid DataGrids DataContext已設置,並且它包含一個名爲ComboDataSource的屬性。

我在組合框喜歡靜態數據的另一種解決方案是,如果您使用的是單經理,你可以做到這一點

ItemsSource = "{Binding Source={x:Static my:StaticData.Instance}, Path=MyEntries}" 

設置一個新的源綁定

ItemsSource = "{Binding Source={x:Static my:StaticData.MyEntries}}" 

終於可以使用DataObjectProvider,雖然我從來沒有真正使用它,但this應解釋你可以用它做什麼。

+0

pb解決了,thx! – bricer