2017-03-17 3 views
1

먼저보기와 ViewModel이 올바르게 연결되었습니다. 하지만 DataTemplate에서 바인딩을 수행 할 수는 없습니다.DataTemplate의 명령이 호출되지 않았습니다.

<Window.Resources> 
    <DataTemplate x:Key="DataGridHeader"> 
      <DockPanel> 
       <TextBlock DockPanel.Dock="Top" TextAlignment="Left" Text="{Binding Content, RelativeSource={RelativeSource Mode=TemplatedParent}}" Margin="5"/> 
       <TextBox DockPanel.Dock="Top" BorderBrush="#3d3d3d" BorderThickness="1" Margin="5" Height="22"> 
       </TextBox> 
       <Button DockPanel.Dock="Top" Height="30" Command="{Binding DataContext.OnFilterCommand, RelativeSource={RelativeSource AncestorType=Window}}"></Button> 
      </DockPanel> 
    </DataTemplate> 
</Window.Resources> 

을 한 후, 나는 나의 DataGrid이 :

그래서 나는 Windows.ResourcesDataTemplate

ViewModel에서
<DataGrid x:Name="DataGridItems" 
       Grid.Row="1" 
       EnableRowVirtualization="True" 
       ItemsSource="{Binding Items, Mode=TwoWay}" 
       RowHeight="25" 
       RowHeaderWidth="0" 
       VerticalContentAlignment="Center" 
       HorizontalGridLinesBrush="#dddddd" 
       VerticalGridLinesBrush="#dddddd" 
       AlternatingRowBackground="#f2f2f2" 
       AutoGenerateColumns="False" 
       Background="#cecece" 
       CanUserAddRows="False"> 
     <DataGrid.CellStyle> 
      <Style TargetType="{x:Type DataGridCell}"> 
       <Setter Property="Template"> 
        <Setter.Value> 
         <ControlTemplate TargetType="{x:Type DataGridCell}"> 
          <Grid Background="{TemplateBinding Background}"> 
           <ContentPresenter VerticalAlignment="Center" /> 
          </Grid> 
         </ControlTemplate> 
        </Setter.Value> 
       </Setter> 
      </Style> 
     </DataGrid.CellStyle>   
     <DataGrid.ColumnHeaderStyle> 
      <Style TargetType="{x:Type DataGridColumnHeader}"> 
       <Setter Property="Padding" Value="0" /> 
       <Setter Property="FontWeight" Value="Bold"/> 
       <Setter Property="Foreground" Value="#111111"></Setter> 
       <Setter Property="Background" Value="#cecece" /> 
       <Setter Property="BorderBrush" Value="#111111" /> 
       <Setter Property="BorderThickness" Value="0" /> 
       <Setter Property="HorizontalContentAlignment" Value="Stretch" /> 
       <Setter Property="SeparatorVisibility" Value="Visible"></Setter> 
      </Style> 
     </DataGrid.ColumnHeaderStyle>    
     <DataGrid.Columns> 
      <DataGridTextColumn Header="Id" Binding="{Binding Path=Id}" HeaderTemplate="{StaticResource DataGridHeader}" Width="65" /> 
      <DataGridTextColumn Header="Name" Binding="{Binding Path=Name}" HeaderTemplate="{StaticResource DataGridHeader}" Width="150" /> 
     </DataGrid.Columns> 
    </DataGrid> 

내가 가진 :

private ICommand _onLoadedCommand; 
public ICommand OnFilterCommand => _onLoadedCommand ?? (_onLoadedCommand = new DelegateCommand(OnFilter)); 

    private void OnFilter() 
    { 
     Debug.WriteLine("Works!"); 
    } 

을하고 아무튼 일하지 마! 나는 모든 곳을 보았다. 나는이 기사를 보았다 : http://nosalan.blogspot.com/2013/10/wpf-datagrid-with-filtering-mvvm.html

그리고 나는 모든 것이 정확하다고 생각한다.

무엇이 누락 되었습니까?

답변

1

누락 된 자료가 없습니다. 나는 당신의 코드를 테스트했고 작동한다! 명령이 실행됩니다. 유일한 차이점은 - 저는 DelegateCommand를 사용하지 않았지만 구현 한 것입니다. 그래서 그것이 이유라고 생각하지 않습니다. VS를 다시 시작하고 컴퓨터를 재부팅하십시오. 그것은 작동해야합니다!