2017-03-17 13 views
1

まずは、私のViewとViewModelが正しく接続されています。しかし、私はDataTemplateでバインドすることはできません。DataTemplateのコマンドが呼び出されていません

だから、私はWindows.ResourcesDataTemplateあります

<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を持っている:

私は私の 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!"); 
    } 

、それはdoesnの仕事はありません!私はどこを見ていた。私はこの記事を見ました:http://nosalan.blogspot.com/2013/10/wpf-datagrid-with-filtering-mvvm.html

そして私はすべて正しいことをしています。

私には何が欠けていますか?

答えて

1

あなたは何もありません。私はあなたのコードをテストし、それは動作します!コマンドが実行されます。唯一の違いは - 私はDelegateCommandを使用していませんが、私の実装だと思うので、それが理由です。 VSを再起動し、コンピュータを再起動します。それは動作するはずです!

関連する問題