2013-11-03 3 views
-1

У меня есть элемент управления, который заполняется из ObservableCollection.Выполнение команды из ItemsControl?

<ItemsControl ItemsSource="{Binding AvailableSessions}" Margin="490,181,10.111,39.111"> 
    <ItemsControl.ItemTemplate> 
     <DataTemplate> 
      <Border BorderBrush="Black" Background="Gainsboro" BorderThickness="1" Margin="2"> 
       <!-- This is the Inner Grid for each element, which is represented in 
       Brown color in your picture --> 
       <Grid HorizontalAlignment="Left" Height="134" VerticalAlignment="Top" 
        Width="263" Background="#FFECECEC"> 
        <Button HorizontalAlignment="Left" Margin="10,10,0,0" 
         VerticalAlignment="Top" Width="243" Height="42" Command="{Binding 
         OpenSessionCommand, Mode=OneWay}"> 
        <TextBlock TextWrapping="Wrap"><Run Text="{Binding SessionName}"/>             
         <LineBreak/><Run Text="{Binding Genre}"/><Run Text=" - "/> 
         <Run Text="{Binding Tempo}"/><Run Text=" BPM"/><LineBreak/> 
        </TextBlock> 
        </Button> 
        <Label Content="{Binding SessionName}" HorizontalAlignment="Left" 
         Margin="10,53,0,0" VerticalAlignment="Top" Width="243" 
         Height="26"/> 
        <Label Content="Drummmman - Electronic Drums"       
        HorizontalAlignment="Left" Margin="10,71,0,0" 
         VerticalAlignment="Top" Width="243" Height="25"/> 
       </Grid> 
      </Border> 
     </DataTemplate> 
    </ItemsControl.ItemTemplate> 

Когда я нажимаю кнопку OpenSessionCommand, ничего не происходит. Это отлично работает, когда я привязываю его вне ItemsControl. Должен ли я добавить эту команду в качестве свойства внутри наблюдаемого коллекционирования? Или есть способ указать привязку внутри ItemsSource к привязке в родительской сетке?

ответ

2

Проблема заключается в том, что ItemSource для ItemsControl установлен, так что это происходит из-за вашей привязки. Просто используйте относительный источник следующим образом:

<Button Command="{Binding RelativeSource={RelativeSource FindAncestor, AncestorType={x:Type Window}}, Path=DataContext.OpenSessionCommand}"/> 

Вместо окна поместить элемент, который содержит контекст данных вы хотели бы получить доступ, в вашем случае Grid.

+0

Это имеет смысл, однако я все еще получаю конструктивную ошибку: «Не удается разрешить MainChatViewModel в App.Views.MainChatView» Когда я запускаю проект, ничего не происходит при нажатии кнопки – user547794

+0

Nevermind, он работает. Благодаря! – user547794

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