У меня есть WPF DataGrid
с 18 столбцами, и у каждого столбца есть TextBox
над ним, чтобы я мог отфильтровать столбец.
Каждый TextBox
связывает Width
с ActualWidth
столбца.
<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>
Я знаю, что могу связать TextBox
Text
с List<string>
следующим образом:
<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]}"/>
Я бы хотел связать Width
из TextBox
с ActualWidth
столбца примерно так:
<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]}"/>
потому что тогда я мог бы использовать ItemsControl
вместо StackPanel
, но так не работает .
Есть ли другой способ добиться этого?