繁体   English   中英

从DataGrid中的DataTemplate访问窗口的DataContext

[英]Access the Window's DataContext from a DataTemplate in a DataGrid

我在WPF应用程序中使用了DataGrid。 它具有针对选定行的RowDetails。 为此,我设置了RowDetailsTemplate。 在此DataTemplate内,我想访问Window的DataContext。 例如,我在RowDetailsTemplate内有一个标签,我想将其内容属性绑定到我的viewModel的属性中,该属性位于窗口的DataContext中。 我该如何实现。

谢谢您的帮助!

查看这种基于RelativeSource的绑定用法,例如{Binding RelativeSource={RelativeSource AncestorType={x:Type Window}} 这是示例:

  1. Xaml:

      <DataGrid ItemsSource="{Binding Strings}" AutoGenerateColumns="False" > <DataGrid.Columns> <DataGridTemplateColumn Header="String" Width="SizeToCells" IsReadOnly="True"> <DataGridTemplateColumn.CellTemplate> <DataTemplate DataType="{x:Type soDataGridHeplAttempt:ClicableItemsModel}"> <ListBox HorizontalAlignment="Stretch" VerticalAlignment="Stretch" ItemsSource="{Binding ClickableItems}"> <ListBox.ItemsPanel> <ItemsPanelTemplate> <StackPanel Orientation="Horizontal"></StackPanel> </ItemsPanelTemplate> </ListBox.ItemsPanel> <ListBox.ItemContainerStyle> <Style TargetType="ListBoxItem"> <Setter Property="ContentTemplate"> <Setter.Value> <DataTemplate> <Button Width="70" Content="{Binding }" Style="{StaticResource ButtonInCellStyle}" HorizontalAlignment="Stretch" VerticalAlignment="Stretch" Command="{Binding RelativeSource={RelativeSource AncestorType={x:Type Window}}, Path=DataContext.Command}" CommandParameter="{Binding RelativeSource={RelativeSource Self}, Path=Content}"/> </DataTemplate> </Setter.Value> </Setter> </Style> </ListBox.ItemContainerStyle> </ListBox> </DataTemplate> </DataGridTemplateColumn.CellTemplate> </DataGridTemplateColumn> </DataGrid.Columns> </DataGrid> 
  2. 查看模型:

     private ICommand _command; public ObservableCollection<ClicableItemsModel> Strings { get; set; } public ICommand Command { get { return _command ?? (_command = new RelayCommand<object>(MethodOnCommmand)); } } private void MethodOnCommmand(object obj) { } 
  3. 在模型类内部对此进行建模:

      public ObservableCollection<String> ClickableItems { get; set; } 

问候,

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM