2013-11-03 33 views
-1

我有一個從ObservableCollection填充的itemsControl。從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之外時,這工作正常。我是否必須將此命令作爲observablecollection內的屬性添加?或者有沒有辦法在ItemsSource中指定綁定到父網格中的綁定?

回答

2

問題是ItemsControl的ItemsSource被設置,所以這是你的綁定派生自的地方。只需使用一個相對的發射源,像這樣:

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

代替窗口把包含的數據上下文,你想訪問,你的情況網格的元素。

+0

這是有道理的,但是我仍然得到一個設計錯誤,說「無法解析App.Views.MainChatView MainChatViewModel」當我運行該項目沒有發生按鈕點擊 – user547794

+0

沒關係,讓它工作。謝謝! – user547794