programing

WPF 데이터 바인딩:"부모" 데이터 컨텍스트에 액세스하려면 어떻게 해야 합니까?

powerit 2023. 4. 23. 11:35
반응형

WPF 데이터 바인딩:"부모" 데이터 컨텍스트에 액세스하려면 어떻게 해야 합니까?

창문에 리스트(아래 참조)가 있습니다.창문은DataContext두 가지 특성이 있습니다.Items그리고.AllowItemCommand.

의 바인딩을 입수하려면 어떻게 해야 합니까?HyperlinkCommand창문에 대해 속성을 해결해야 합니다.DataContext?

<ListView ItemsSource="{Binding Items}">
  <ListView.View>
    <GridView>
      <GridViewColumn Header="Action">
        <GridViewColumn.CellTemplate>
          <DataTemplate>
            <StackPanel>
              <TextBlock>

                <!-- this binding is not working -->
                <Hyperlink Command="{Binding AllowItemCommand}"
                           CommandParameter="{Binding .}">
                    <TextBlock Text="Allow" />
                </Hyperlink>

              </TextBlock>
            </StackPanel>
          </DataTemplate>
        </GridViewColumn.CellTemplate>
      </GridViewColumn>
    </GridView>
  </ListView.View>
</ListView>

다음과 같은 작업을 수행할 수 있습니다.

...Binding="{Binding RelativeSource={RelativeSource FindAncestor, 
AncestorType={x:Type Window}}, Path=DataContext.AllowItemCommand}" ...

이것도 동작합니다.

<Hyperlink Command="{Binding RelativeSource={RelativeSource AncestorType=ItemsControl},
                             Path=DataContext.AllowItemCommand}" />

ListView그 상속을 하다DataContext부터Window이 시점에서도 이용할 수 있습니다.
그리고 그 이후로ListView유사한 제어장치(예:Gridview,ListBox, 등)은 의 서브클래스입니다.ItemsControl,그Binding그런 제어는 완벽하게 작동하기 때문입니다.

이것은 Silverlight 5에서도 동작합니다(아마도 이전 버전일 것입니다만, 아직 테스트해 본 적은 없습니다.상대 소스를 이렇게 사용했는데 잘 작동했어요.

RelativeSource="{RelativeSource Mode=FindAncestor, AncestorType=telerik:RadGridView}"

언급URL : https://stackoverflow.com/questions/1127933/wpf-databinding-how-do-i-access-the-parent-data-context

반응형