如何正确绑定到数据模板中的项目源

时间:2019-07-13 10:44:05

标签: c# wpf mvvm data-binding itemsource

我正在使用ItemsControl,其中有一个对象列表... ItemContainerTemplate中有另一个DataTemplate。在该DataTemplate内部,我无法再绑定到ItemsControl.ItemSource

由于我对通过Find AncestorRelativeSource等进行的绑定不是很好。我尝试了所有操作,甚至都不知道如何正确使用它们...

<ItemsControl ItemsSource="{Binding NoteList}">
  <ItemsControl.ItemTemplate>
    <ItemContainerTemplate>
      <GroupBox Header="{Binding Title}"
                Name="MyNoteList"
                Style="{DynamicResource MaterialDesignCardGroupBox}"
                Margin="16">
        <GroupBox.HeaderTemplate>
          <DataTemplate>
            <DockPanel>
              <TextBlock Margin="8,0,0,0"
                         VerticalAlignment="Center"
                         Style="{StaticResource MaterialDesignSubheadingTextBlock}"
                         Text="{Binding}" />
              <Button Padding="5"
                      Command="{Binding DataContext.DeleteCommand, RelativeSource={RelativeSource AncestorType=UserControl}}"
                      CommandParameter="{Binding RelativeSource={RelativeSource FindAncestor, AncestorType={x:Type ItemsControl}}, Path=DataContext.NoteId}"
                      HorizontalAlignment="Right"
                      Background="Transparent"
                      BorderBrush="Transparent">
                <materialDesign:PackIcon Kind="Delete"
                                         Height="25"
                                         Width="25"
                                         VerticalAlignment="Center" />
              </Button>
            </DockPanel>
          </DataTemplate>
        </GroupBox.HeaderTemplate>
      </GroupBox>
    </ItemContainerTemplate>
  </ItemsControl.ItemTemplate>
</ItemsControl>

我想提到的是,我想绑定到NoteList中名称为NoteId的{​​{1}}对象。但是我一直从中得到“空”。我的ViewModel内部的绑定肯定是正确的。所以我只需要知道如何从我的CommandParameter

访问NoteId属性

1 个答案:

答案 0 :(得分:0)

我实际上已经解决了问题! xD!我只需要绑定到ItemContainerTemplate内部的元素,就我而言,就是绑定到GroupBox(在上面的代码片段中看到)。

CommandParameter="{Binding DataContext.NoteId, RelativeSource={RelativeSource Mode=FindAncestor, AncestorType={x:Type GroupBox}}}"