2010-10-21 140 views
0

當使用具有ItemsSource的ItemsControl時,我在使用UserControl內的數據綁定時遇到了一些麻煩。我的Eventtrigger從未被調用過。MVVM嵌套數據綁定

我認爲問題是,當我把我的eventtrigger在該行:

<cmd:EventToCommand Command="{Binding ElementName=layoutroot, Path=DataContext.Checked}" /> 

它試圖找到的CheckBox收集檢查事件因爲我已經把我的ItemsSource,而應該看它父母。我一直在尋找解決方案的天,但他們都沒有工作。

我的代碼如下所示:

<Grid x:Name="layoutroot"> 
      <ItemsControl x:Name="itemcontrol" ItemsSource="{Binding CheckBoxes}"> 
       <ItemsControl.ItemsPanel> 
        <ItemsPanelTemplate> 
         <StackPanel Orientation="Vertical"></StackPanel> 
        </ItemsPanelTemplate> 
       </ItemsControl.ItemsPanel> 
       <ItemsControl.ItemTemplate> 
        <DataTemplate> 
         <s:SurfaceCheckBox Background="White" Foreground="White"> 
          <i:Interaction.Triggers> 
           <i:EventTrigger EventName="Checked"> 
            <cmd:EventToCommand Command="{Binding ElementName=layoutroot, Path=DataContext.Checked}" /> 
           </i:EventTrigger> 
          </i:Interaction.Triggers> 
         </s:SurfaceCheckBox> 
        </DataTemplate> 
       </ItemsControl.ItemTemplate> 
      </ItemsControl> 
     </Grid> 

當我嘗試下面的代碼它的工作原理完全如預期:

<Grid x:Name="layoutroot"> 
    <s:SurfaceCheckBox Background="White" Foreground="White" Content="{Binding Content}" > 
     <i:Interaction.Triggers> 
      <i:EventTrigger EventName="Checked"> 
       <cmd:EventToCommand Command="{Binding ElementName=layoutroot, Path=DataContext.Checked}" /> 
      </i:EventTrigger> 
     </i:Interaction.Triggers> 
    </s:SurfaceCheckBox> 
</Grid> 

但我真的需要一個ItemsControl內部的這種行爲一組的ItemsSource。

任何想法?

回答

1

ItemsControl的內部綁定放置在集合中的當前項目上。你需要做的是找出父母,並從那裏綁定。

試試這個從ItemsControl內,更換MyUserControlName

<cmd:EventToCommand Command="{Binding RelativeSource={RelativeSource FindAncestor, AncestorType={x:Type local:MyUserControlName} }, Path=DataContext.Checked}" /> 
+0

感謝您的答覆。我發現我的複選框上還有另一層,這就是爲什麼我的事件沒有被觸發。 – Marc 2010-10-24 09:50:25