3

次のリンク ( 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>

これに関するご支援をいただければ幸いです。私はこれで一日中頭を悩ませてきました!

(アドバイスを求めて他の投稿に投稿したかったのですが、オプションが表示されませんでした!)

4

1 に答える 1

3

はのTextbox中にありますDataGrids ItemSource DataContext

DataContextTextBox の を UI に戻すように設定してみてくださいDataContext

<TextBox Name="IDSearcBox" Text="{Binding FilterString, ElementName=UI}"
于 2013-11-13T09:07:28.917 に答える