2016-06-27 5 views
0

Мой код выглядит следующим образом:Различные DataContext в ItemsControl

<ItemsControl ItemsSource="{Binding Path=MTMngRoot.MTManager.MTCollection}"> 
    <ItemsControl.ItemTemplate> 
     <DataTemplate> 
      <Grid> 
       <Grid.ColumnDefinitions> 
        <ColumnDefinition Width="*"/> 
        <ColumnDefinition Width="*"/> 
       </Grid.ColumnDefinitions> 

       <TextBox Text="{Binding Path=Name}" ToolTip="Name" Controls:TextBoxHelper.Watermark="Name" Grid.Column="0"/> 
       <ComboBox SelectedItem="{Binding Path=DefaultCT}" Grid.Column="1"> 
        <ComboBoxItem>Item 1</ComboBoxItem> 
        <ComboBoxItem>Item 2</ComboBoxItem> 
       </ComboBox> 
      </Grid> 
     </DataTemplate> 
    </ItemsControl.ItemTemplate> 
</ItemsControl> 

Этот код работает правильно. Но теперь я хочу связать Itemssource с ComboBox. Моя проблема в том, что Path из Items, который должен быть привязан к ComboBox, полностью отличается. Path выглядит так: CTMngRoot.CTManager.CTCollection.Name. Любые идеи, как я могу это сделать?

ответ

2

В этих случаях вы подходите к элементу управления с правильным DataContext.

{Binding DataContext.CTMngRoot.CTManager.CTCollection, 
     RelativeSource={RelativeSource AncestorType=ItemsControl}} 
+0

Спасибо за ответ! У меня проблемы с этим. Я забыл написать, что я установил «Main'-Datacontext» в файле 'xaml.cs' (' this.DataContext = this.MngRoot; '). Внутри этого класса находятся два экземпляра ('CTMngRoot' и' MTMngRoot'). Теперь я добавил свой код в свой 'ComboBox'. Теперь он выглядит так: ' MyNewName

+0

Вы не перенесли мое решение. 'RelativeSource' делает ваш источник привязки элементом управления, поэтому вам нужно привязываться к' DataContext' в начале «Пути» для доступа к данным. Кроме того, привязка «ComboBox.DataContext» - плохая идея, вы должны напрямую связывать «ItemsSource», как я показал, иначе вам будет сложно связать «SelectedItem». –

+0

Спасибо! Теперь это сработало. Вы сделали ошибку. Вы написали '{Binding DataComtext.CTMngRoot ...' Я думаю, его нужно называть '{Binding DataContext.CTMngRoot ...'. Спасибо agaiN! – MyNewName

Смежные вопросы