Есть DataGrid, при выборе строки которого выпадает RowDetailsTemplate, в DataTemplate указан еще один DataGrid. Суть в том что грид внутри DataTemplate привязан к ObservableCollection и должен отображать некоторую информацию в зависимости от выбранной строки основного DataGrid. Собственно разметка :
<DataGrid x:Name="first" IsReadOnly="True" AutoGenerateColumns="False" RowHeight="30" GridLinesVisibility="None" ItemsSource="{Binding ClientListCollection}" SelectedValue="{Binding KlientForDetails, Mode=OneWayToSource}">
<i:Interaction.Triggers>
<i:EventTrigger EventName="SelectionChanged">
<i:InvokeCommandAction Command="{Binding SelectKlientForDetails}"/>
</i:EventTrigger>
</i:Interaction.Triggers>
<DataGrid.Columns>
<DataGridTextColumn Binding="{Binding NameSimple}" Width="*" />
<DataGridTextColumn Binding="{Binding order}" MinWidth="100" Width="100"/>
</DataGrid.Columns>
<DataGrid.RowDetailsTemplate>
<DataTemplate>
<Grid>
<DataGrid x:Name="second" IsReadOnly = "True" AutoGenerateColumns="False" RowHeight="20" Height="100" ItemsSource="{Binding klientDetails,Mode=TwoWay}">
<DataGrid.Columns>
<DataGridTextColumn Binding ="{Binding title}" Width="100" />
<DataGridTextColumn Binding="{Binding value}" Width="*"/>
</DataGrid.Columns>
</DataGrid>
</Grid>
</DataTemplate>
</DataGrid.RowDetailsTemplate>
</DataGrid>
Проблема в том, что при выборе строки first грида грид second разворачивается но совершенно пустым.
Однако если вывести second из под RowDetailsTemplate
- заполняется как положено(т.е. дело не во вьюмо дели).
Можно конечно сделать 2 грида где один показывает просто список обьектов, а второй детальную информацию по нему но хочется именно что бы при выборе строки, с RowDetailsTemplate. Как исправить эту разметку?
У меня есть предположение, что это происходит из-за размеров контейнера, в котором размещен основной DataGrid. Поэтому как обещал в коментариях привожу разметку окна.
XAML код:
<Window x:Class="WpfApplication1.MainWindow"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
xmlns:viewModel="clr-namespace:WpfApplication4.ViewModel"
Title="MainWindow"
Width="500"
Height="500"
mc:Ignorable="d">
<Grid>
<Grid.RowDefinitions>
<RowDefinition Height="*" />
<RowDefinition Height="Auto" />
</Grid.RowDefinitions>
<DataGrid AutoGenerateColumns="False"
IsReadOnly="True"
ItemsSource="{Binding ClientListCollection}">
<DataGrid.Columns>
<DataGridTextColumn Width="*"
Binding="{Binding NameSimple}" />
<DataGridTextColumn Width="100"
MinWidth="100"
Binding="{Binding Order}" />
</DataGrid.Columns>
<DataGrid.RowDetailsTemplate>
<DataTemplate DataType="{x:Type viewModel:ParentViewModel}">
<DataGrid AutoGenerateColumns="False"
IsReadOnly="True"
ItemsSource="{Binding Details}">
<DataGrid.Columns>
<DataGridTextColumn Width="100"
Binding="{Binding Title}" />
<DataGridTextColumn Width="*"
Binding="{Binding Value}" />
</DataGrid.Columns>
</DataGrid>
</DataTemplate>
</DataGrid.RowDetailsTemplate>
</DataGrid>
<Button Grid.Row="1"
Command="{Binding DoCommand}"
Content="Тыц" />
</Grid>
</Window>
а так же ViewModel
public class ParentViewModel : ViewModelBase
{
public string NameSimple { get; set; } // INPC
public string Order { get; set; } // INPC
public ObservableCollection<DetailsViewModel> Details { get; set; }
public ParentViewModel()
{
Details = new ObservableCollection<DetailsViewModel>();
}
}
public class DetailsViewModel : ViewModelBase
{
public string Title { get; set; } // INPC
public int Value { get; set; } // INPC
}
public class MainViewModel : ViewModelBase
{
public ObservableCollection<ParentViewModel> ClientListCollection { get; set; }
public MainViewModel()
{
ClientListCollection = new ObservableCollection<ParentViewModel>();
// Заполняем данными ClientListCollection...
}
}
P.S. Некоторый вещи для вроде EventTrigger убраны для того что бы не загромождать код.
Как развивать веб-проекты в 2026 году: технологии, контент E-E-A-T и факторы доверия
Современные инструменты для криптотрейдинга: как технологии помогают принимать решения
Апостиль в Лос-Анджелесе без лишних нервов и бумажной волокиты
Основные этапы разработки сайта для стоматологической клиники