【发布时间】:2014-12-13 17:44:49
【问题描述】:
我有多个 DataGrid 来管理我的数据库中的数据。 该功能还包括添加新行。但问题是,在我给定的示例中,创建的行与另一个 DataGrid 设置的 DataGrid 的 DataContext 之间存在依赖关系。 就我而言,我有:
Parties - 一个派对可以有 n 个曲目。如果您更改派对 DataGrid 的选择,您将更改 Track DataGrid 的视图。
Tracks - Track 本质上是对派对的引用。
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 对象传递给默认构造函数。
【问题讨论】: