[英]WPF DataGrid - add new row / DataContext
我有多个DataGrid来管理数据库的数据。 功能还包括添加新行。 问题是,在我给定的示例中,创建的行与另一个DataGrid设置的DataGrid的DataContext之间存在依赖关系。 就我而言,我有:
派对-派对可以有n条曲目。 如果更改“派对数据网格”的选择,则将更改“跟踪数据网格”的视图。
航迹-航迹本质上是回溯到该党的参考。
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对象传递给默认构造函数。
解决方法是,我执行以下操作:我将TrackVM封装在一个名为TracksVM的包装器类中的ObservableCollection中。 在那里,我向集合的CollectionChanged事件注册了一个函数。 如果添加了新的TrackVM,则此事件处理程序将通过属性设置所需的引用。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.