Я пытаюсь представить 2 DataGrids как детали для выбранной строки в прилагаемой DataGrid. ViewModel имеет помимо пары строковых свойств два списка, которые должны отображаться, если выбрана строка. После выбора строки в StdMolecules
DataGrid должна отображаться подробная информация о строке. Детали строк в ViewModel называются Molecules
и Elements
и устанавливаются после выбора ряда для молекул и элементов SelectedMolecule
, который является MoleculeModel
.
ViewModel выглядит так (сводная таблица опущена для краткости)
public class MoleculeManagementViewModel : Screen
{
:
:
public int Id {...} // all properties with backingfields and Notify
public string Name {...}
public string MolecularFormula {...}
public BindableCollection<MoleculeModel> Molecules {...}
public BindableCollection<ElementModel> Elements {...}
public BindableCollection<MoleculeModel> StdMolecules {...}
public MoleculeModel SelectedMolecule {...}
:
:
}
MoleculeModel
и ElementModel
являются следующими
public class MoleculeModel
{
public int Id {..}
public int Name {..}
public int MolecularFormula {..}
public List<MoleculeModel> Molecules {...} // every molecule may have other molecules as building blocks
public List<ElementModel> Elements {...} // elements forming a molecule
}
public class ElementModel
{
public int Id {..}
public int Name {..}
public int Symbol {..}
}
Я использовал следующий XAML для представления структуры данных внутри объекта Page-Object. Я только попытался отобразить свойство Id
списка Molecuels
, поскольку, как только механизм будет понят, другой последует.
Но мне не удалось это осуществить. : - (
<StackPanel Orientation="Vertical">
<Grid Margin="10">
<DataGrid x:Name="StdMolecules" AutoGenerateColumns="False" SelectedItem="{Binding SelectedMolecule}"
CanUserAddRows="False" CanUserDeleteRows="False">
<DataGrid.Columns>
<DataGridTextColumn Header="Id" Binding="{Binding Id}"/>
<DataGridTextColumn Header="Name" Binding="{Binding Name}"/>
<DataGridTextColumn Header="Strukturfomel" Binding="{Binding MolecularFormula}"/>
</DataGrid.Columns>
<DataGrid.RowDetailsTemplate>
<DataTemplate>
<StackPanel Orientation="Horizontal" Margin="5">
<!-- Constituent Molecule Grid -->
<Grid Margin="5">
<DataGrid x:Name="Molecules" AutoGenerateColumns="False"
CanUserDeleteRows="False" CanUserAddRows="False">
<DataGrid.Columns>
<!-- I try to display the 'Id' property of each molecule in the 'Molecules' in the ViewModel -->
<DataGridTextColumn Header="Id" Binding="{Binding MoleculeModel.Id}"/>
<DataGridTextColumn Header="Name" />
<DataGridTextColumn Header="Strukturformel"/>
</DataGrid.Columns>
</DataGrid>
</Grid>
<!-- Constituent Element Grid -->
<Grid Margin="5">
<DataGrid x:Name="Elements" AutoGenerateColumns="False"
CanUserDeleteRows="False" CanUserAddRows="False">
<DataGrid.Columns>
<DataGridTextColumn Header="Id"/>
<DataGridTextColumn Header="Name"/>
<DataGridTextColumn Header="Symbol"/>
</DataGrid.Columns>
</DataGrid>
</Grid>
</StackPanel>
</DataTemplate>
</DataGrid.RowDetailsTemplate>
</DataGrid>
</Grid>
</StackPanel>
Я пробовал несколько разных способов отображения Id
молекулы, но ни один из них не удался.
Я был бы признателен, если бы мог получить подсказку, как это сделать правильно.
Ура,
Питер