2013-01-16 3 views
0

DataGrid의 ItemsSource 속성이 내 ViewModel 속성에 바인딩됩니다.템플릿 및 ItemsSource 속성에서 wpf 바인딩

<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

당신은 트리를 도보로 다른 적절한 소스를 찾을 수있는 당신은 물론이

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

이 같은 FindAncestor로 RelativeSource 마크 업을 사용할 수는 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 solved, thx! – bricer

관련 문제