[英]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.