Я получил следующий код, он состоит из DataGrid, в котором перечислены элементы, соответствующие выбранному элементу в ListBox.Все работает, но ширина столбцов DataGrid ведет себя странно.Я установил ширину столбца «name» в звездочку, чтобы столбец «wert» занимал пространство, необходимое для его содержимого, а столбец «name» занимал остальное.Это работает, но с небольшой проблемой.Когда приложение запускается, все столбцы имеют минимальную ширину, и только выбор другого элемента в ListBox обновляет ширину столбцов до нужных значений (звездочка для «имени», автоматическая для «wert»).Я пытался использовать метод UpdateLayout сетки данных при загрузке приложения, но это не помогло.
Кроме того, я использую расширитель, и когда все расширители закрыты, я должен сначала развернуть один из элементов,и затем загрузите другой элемент в списке для ширины, чтобы быть правильными.
Может ли кто-нибудь указать мне правильное направление?:)
ОБНОВЛЕНИЕ: первоначальный вопрос решен, но есть еще одна небольшая проблема: столбцы больше не свернуты, но они также не имеют желаемого размера.Их размер соответствует размеру заголовка, а не содержимого строк.Это происходит только тогда, когда расширитель закрыт по умолчанию.Когда я устанавливаю расширитель для расширения, все столбцы устанавливаются на ширину их содержимого, как требуется.
Вот используемый код:
<Grid.DataContext>
<XmlDataProvider x:Name="XmlData" Source="entries.xml" XPath="Root/Person" />
</Grid.DataContext>
<ListBox Name="PersonListBox"
ItemsSource="{Binding}"
ItemTemplate="{StaticResource listBoxTemplate}"
IsSynchronizedWithCurrentItem="True"
Visibility="Visible" SelectionMode="Single" SelectedIndex="-1" DataContext="{Binding}">
</ListBox>
<DataGrid IsSynchronizedWithCurrentItem="True" Name="itemGrid"
DataContext="{Binding ElementName=PersonListBox, Path=SelectedItem}"
CanUserResizeColumns="False"
CanUserResizeRows="False"
IsReadOnly="true"
Background="White"
HorizontalScrollBarVisibility="Hidden"
AutoGenerateColumns="False">
<DataGrid.Resources>
<CollectionViewSource x:Key="items" Source="{Binding XPath=item}">
<CollectionViewSource.GroupDescriptions>
<PropertyGroupDescription PropertyName="@name"/>
</CollectionViewSource.GroupDescriptions>
</CollectionViewSource>
</DataGrid.Resources>
<DataGrid.ItemsSource>
<Binding Source="{StaticResource items}"/>
</DataGrid.ItemsSource>
<DataGrid.Columns>
<DataGridTextColumn Width="*" Header="Name" Binding="{Binding XPath=@name}"/>
<DataGridTextColumn Header="Wert" Binding="{Binding XPath=@value, Converter={StaticResource sumConverter}}}"/>
</DataGrid.Columns>
<DataGrid.GroupStyle>
<GroupStyle>
<GroupStyle.ContainerStyle>
<Style TargetType="{x:Type GroupItem}">
<Setter Property="Template">
<Setter.Value>
<ControlTemplate TargetType="{x:Type GroupItem}">
<Expander >
<Expander.Header>
<StackPanel Orientation="Horizontal">
<TextBlock Text="{Binding Path=Name}" />
<TextBlock Text="{Binding Path=Items, Converter={StaticResource sumConverter}}" />
</StackPanel>
</Expander.Header>
<ItemsPresenter />
</Expander>
</ControlTemplate>
</Setter.Value>
</Setter>
</Style>
</GroupStyle.ContainerStyle>
</GroupStyle>
</DataGrid.GroupStyle>
</DataGrid>