2015-10-20 67 views
0

我在我的WPF应用程序中使用DataGrid。它具有选定行的RowDetails功能。为此,我设置了RowDetailsTemplate。在这个DataTemplate中我想访问我的Window的DataContext。例如,我的RowDetailsTemplate中有一个标签,我想将它的content-property绑定到viewModel的一个属性,该属性位于窗口的DataContext中。我如何做到这一点。从DataGrid中的DataTemplate访问窗口的DataContext

谢谢您的帮助!

回答

0

看看基于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. 型号PU这个模型类中:

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

关于,

+0

该死的。那么,我确实知道绑定到一个相对的源代码,我也试过,但我忘了写Path = DataContext.MyProperty。我只写了Path = MyProperty。我的错。无论如何非常感谢你的帮助。我为这个问题疯了。 – hoxplus

+0

@hoxplus不用客气。 – Ilan