1
まずは、私のViewとViewModelが正しく接続されています。しかし、私はDataTemplateでバインドすることはできません。DataTemplateのコマンドが呼び出されていません
だから、私はWindows.Resources
で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
を持っている:
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
そして私はすべて正しいことをしています。
私には何が欠けていますか?