次のリンク ( textbox から wpf datagrid の値をフィルターする) のアドバイスに従って、図 A を作成しました。これにより、ボタンを押したときに TextBox の内容に基づいて DataGrid をフィルター処理できます。
ただし、図 B のように DataGrid の列ヘッダー内で Button と TextBox を移動すると、ボタンは引き続き機能しますが、コード内で null が表示されているため、TextBox のバインドは機能しません。
http://i42.tinypic.com/2quivpx.png
リンクで行われたことの間の唯一の実際の変更は、TextBox と Button を DataGridTemplateColumn ヘッダー内に配置した XAML です。
<Grid DataContext="{Binding ElementName=UI}" >
<DataGrid AutoGenerateColumns="False" Height="184" HorizontalAlignment="Left" Margin="12,23,0,0" Name="dataGrid1" VerticalAlignment="Top" Width="384" ItemsSource="{Binding DataGridCollection}">
<DataGrid.Columns>
<DataGridTemplateColumn>
<DataGridTemplateColumn.HeaderTemplate>
<DataTemplate>
<StackPanel Orientation="Horizontal">
<TextBox Name="IDSearcBox" Text="{Binding FilterString}" Width="100"/>
<Button Name="IDSearchButton" Click="IDButton_Click" Content="I" Width="30"/>
</StackPanel>
</DataTemplate>
</DataGridTemplateColumn.HeaderTemplate>
<DataGridTemplateColumn.CellTemplate>
<DataTemplate>
<TextBlock Text="{Binding ID}"/>
</DataTemplate>
</DataGridTemplateColumn.CellTemplate>
</DataGridTemplateColumn>
<DataGridTemplateColumn>
<DataGridTemplateColumn.HeaderTemplate>
<DataTemplate>
<StackPanel Orientation="Horizontal">
<TextBox Name="NameSearchBox" Text="{Binding FilterString}" Width="100"/>
<Button Name="NameSearchButton" Click="NameSearchButton_Click" Content="N" Width="30"/>
</StackPanel>
</DataTemplate>
</DataGridTemplateColumn.HeaderTemplate>
<DataGridTemplateColumn.CellTemplate>
<DataTemplate>
<TextBlock Text="{Binding Name}"/>
</DataTemplate>
</DataGridTemplateColumn.CellTemplate>
</DataGridTemplateColumn>
<DataGridTextColumn Header="SomethingElse" Binding="{Binding SomethingElse}"/>
</DataGrid.Columns>
</DataGrid>
</Grid>
これに関するご支援をいただければ幸いです。私はこれで一日中頭を悩ませてきました!
(アドバイスを求めて他の投稿に投稿したかったのですが、オプションが表示されませんでした!)