I have a WPF DataGrid with 18 columns and each column has a TextBox above it so I can filter the column.
Each TextBox binds Width to ActualWidth of the column.
<StackPanel Grid.Row="0" Orientation="Horizontal">
<TextBox Width="{Binding Path=ActualWidth, ElementName=Column1}"
Text="{Binding FilterFirstName}"/>
<TextBox Width="{Binding Path=ActualWidth, ElementName=Column2}"
Text="{Binding FilterLastName}"/>
<TextBox Width="{Binding Path=ActualWidth, ElementName=Column3}"
Text="{Binding FilterAge}"/>
<!-- 15 more -->
</StackPanel>
<DataGrid x:Name="dataGridUsers" Grid.Row="1"
ItemsSource="{Binding Users}">
<DataGrid.Columns>
<DataGridTextColumn x:Name="Column1" Width="*"
Binding="{Binding FirstName}"/>
<DataGridTextColumn x:Name="Column2" Width="*"
Binding="{Binding LastName}"/>
<DataGridTextColumn x:Name="Column3" Width="*"
Binding="{Binding Age}"/>
<!-- 15 more -->
</DataGrid.Columns>
</DataGrid>
I know that I can bind TextBox Text to a List<string> like this:
<TextBox Width="{Binding Path=ActualWidth, ElementName=Column1}"
Text="{Binding Filters[0]}"/>
<TextBox Width="{Binding Path=ActualWidth, ElementName=Column2}"
Text="{Binding Filters[1]}"/>
<TextBox Width="{Binding Path=ActualWidth, ElementName=Column3}"
Text="{Binding Filters[2]}"/>
I would like to bind Width of the TextBox to ActualWidth of the column with something like this:
<TextBox Width="{Binding Path=ActualWidth, Source=dataGridUsers.Columns[0]}"
Text="{Binding Filters[0]}"/>
<TextBox Width="{Binding Path=ActualWidth, Source=dataGridUsers.Columns[1]}"
Text="{Binding Filters[1]}"/>
<TextBox Width="{Binding Path=ActualWidth, Source=dataGridUsers.Columns[2]}"
Text="{Binding Filters[2]}"/>
Because then I could use ItemsControl instead of StackPanel but it doesn't work this way.
Is there any other way I could achieve this?