2015-08-19 44 views
0

我希望TemplateSelector可以根據國家/地區選擇模板。 因此,對於MyDataTemplateSelector:SelectTemplate收到的國家我綁定ContentContentPresenterCountriesComboBox。 問題是返回的模板未綁定到CityStreets。我認爲這是因爲所選模板的DataContext未綁定到ViewModel,因此無法訪問模板的有界屬性。如何將參數傳遞給ContentTemplateSelector?

我嘗試下面的代碼,但在我看來,由於ContentPresenterContent勢必CountriesComboBox而不是{Binding}因爲它應該是它不工作。但是,如果我將Content綁定到{Binding},我將無法訪問TemplatrSelector中的選定項CountriesComboBox

那麼,我該怎麼做?

<DataGrid> 
    <DataGrid.Resources> 
     <DataTemplate x:Key="Readonly_CellEditingTemplate"> 
      <TextBlock Text="{Binding City}"/> 
     </DataTemplate> 
     <DataTemplate x:Key="Editable_CellEditingTemplate"> 
      <ComboBox ItemsSource="{Binding Streets}" /> 
     </DataTemplate> 
     <local:MyDataTemplateSelector ReadonlyTemplate="{StaticResource Readonly_CellEditingTemplate}" EditableTemplate="{StaticResource Editable_CellEditingTemplate}" x:Key="MyDataTemplateSelector"/> 
    </DataGrid.Resources> 
    <DataGrid.Columns> 
     <DataGridTemplateColumn Header="City"> 
      <DataGridTemplateColumn.CellTemplate> 
       <DataTemplate> 
        <TextBlock Text="{Binding City}"/> 
       </DataTemplate> 
      </DataGridTemplateColumn.CellTemplate> 
      <DataGridTemplateColumn.CellEditingTemplate> 
       <DataTemplate> 
        <ContentPresenter x:Name="Presenter" Content="{Binding ElementName=CountriesComboBox, Path=SelectedIndex}" ContentTemplateSelector="{StaticResource MyDataTemplateSelector}" /> 
       </DataTemplate> 
      </DataGridTemplateColumn.CellEditingTemplate> 
     </DataGridTemplateColumn> 
     </DataGrid.Columns> 
    </DataGrid> 

    <ComboBox Name="CountriesComboBox" ItemsSource="{Binding Countries}" /> 

回答

0

我在Victor找到了3年前的答案post。謝謝維克多。 我只需要在每個DataTemplate中添加DataContext="{Binding RelativeSource={RelativeSource AncestorType=ContentControl},Path=DataContext}"