У меня есть несколько DataGrids для управления данными моей базы данных. Функциональность также включает добавление новых строк. Проблема в том, что в моем примере есть зависимость между созданной строкой и DataContext DataGrid, установленным другим DataGrid. В моем случае у меня есть:WPF DataGrid - добавить новую строку/DataContext
Стороны - сторона может иметь n треков. Если вы измените выбор PartyGridGrid, вы измените представление Track TrackGrid.
Треки - трек имеет по существу ссылку на партию.
XAML:
<DataGrid AutoGenerateColumns="False" SelectionMode="Single" DataContext="{Binding CurrentParty}" ItemsSource="{Binding Tracks}" SelectedItem="{Binding CurrentTrack}">
<DataGrid.ContextMenu>
<ContextMenu>
<MenuItem Header="_Delete" Command="{Binding DeleteTrackCommand}"/>
</ContextMenu>
</DataGrid.ContextMenu>
<DataGrid.Columns>
<DataGridTextColumn IsReadOnly="True" Header="Votes" Binding="{Binding Path=Votes}">
<DataGridTextColumn.CellStyle>
<Style TargetType="DataGridCell">
<Setter Property="Background" Value="LightGray" />
</Style>
</DataGridTextColumn.CellStyle>
</DataGridTextColumn>
<DataGridTemplateColumn Header="Interpret" IsReadOnly="False">
<DataGridTemplateColumn.CellTemplate>
<DataTemplate>
<TextBlock Text="{Binding Path=Interpret}" />
</DataTemplate>
</DataGridTemplateColumn.CellTemplate>
<DataGridTemplateColumn.CellEditingTemplate>
<DataTemplate>
<TextBox Text="{Binding Path=Interpret}" />
</DataTemplate>
</DataGridTemplateColumn.CellEditingTemplate>
</DataGridTemplateColumn>
<DataGridTemplateColumn Header="Title" IsReadOnly="False">
<DataGridTemplateColumn.CellTemplate>
<DataTemplate>
<TextBlock Text="{Binding Path=Title}" />
</DataTemplate>
</DataGridTemplateColumn.CellTemplate>
<DataGridTemplateColumn.CellEditingTemplate>
<DataTemplate>
<TextBox Text="{Binding Path=Title}" />
</DataTemplate>
</DataGridTemplateColumn.CellEditingTemplate>
</DataGridTemplateColumn>
<DataGridTemplateColumn Header="URL" IsReadOnly="False">
<DataGridTemplateColumn.CellTemplate>
<DataTemplate>
<TextBlock Text="{Binding Path=Url}" />
</DataTemplate>
</DataGridTemplateColumn.CellTemplate>
<DataGridTemplateColumn.CellEditingTemplate>
<DataTemplate>
<TextBox Text="{Binding Path=Url}" />
</DataTemplate>
</DataGridTemplateColumn.CellEditingTemplate>
</DataGridTemplateColumn>
</DataGrid.Columns>
</DataGrid>
код в ViewModel:
public TrackVM() {
// requires the "CurrentParty" from DataContext.
}
Я мог бы получить доступ к DataContext в коде позади, но это своего рода перерыв архитектуру MVVM, не так. То, что я хочу сделать/вместо этого: передать объект CurrentParty в конструктор по умолчанию.