2015-10-20 43 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