我有一个 DataGrid,在那个 DataGrid 的 DataGrid.RowDetailsTemplate 中我放了另一个 DataGrid。现在我的第一个 Datagrid 有 ItemsSource="{Binding MatchObsCollection}"并且我的 DataGrid.RowDetailsTemplate 中的内部 Datagrid 有单独的 ItemSource。但是内部 Datagrid 没有填充。我正在使用 MVVM,并且我通过 Viewmodel 上的 ObservableCollections 绑定(bind)了两个 Datagrid 。谁能帮助我(我的问题几乎与 Displaying hierarchal parent child data in WPF DataGrid 相同,但我在那篇帖子中也没有找到任何好的答案)。我的 xaml 代码附在下面。谢谢,
<DataGrid HorizontalAlignment="Stretch" Margin="0" x:Name="dataGridParent" ItemsSource="{Binding MatchObsCollection}"
Style="{StaticResource EfesDataGridStyle}" FrozenColumnCount="14" GridLinesVisibility="All"
HorizontalGridLinesBrush="#DADADA" VerticalGridLinesBrush="#DADADA" Cursor="Hand" AutoGenerateColumns="False"
RowDetailsVisibilityMode="Visible"
util:ParentMatchDataGridRowClickHandler.MethodName="ParentMatchDatagrdRowClick"
SelectedItem="{Binding SelectedMatch}"
>
<DataGrid.Columns>
<DataGridTextColumn Header="Kod" Binding="{Binding MatchNo}" Width="50*" />
<DataGridTextColumn Header="Tarih" Binding="{Binding MatchDate}" Width="70*"/>
<DataGridTextColumn Header="Ev Sahibi" Binding="{Binding MatchHome}" Width="100*"/>
<DataGridTextColumn Header="Konuk" Binding="{Binding MatchVisitor}" Width="50*"/>
<DataGridTextColumn Header="1" Binding="{Binding MatchResultHomeOdds}" Width="30*" ></DataGridTextColumn>
<DataGridTextColumn Header="X" Binding="{Binding MatchResultDrawOdds}" Width="30*" />
<DataGridTextColumn Header="2" Binding="{Binding MatchResultVisitorOdds}" Width="30*"/>
<DataGridTextColumn Header="T1" Binding="{Binding MatchresultSingleHomeOdds}" Width="30*" />
<DataGridTextColumn Header="TX" Binding="{Binding MatchresultSingleDrawOdds}" Width="30*" />
<DataGridTextColumn Header="T2" Binding="{Binding MatchresultSingleVisitorOdds}" Width="30*" />
<DataGridTextColumn Header="+" CellStyle ="{StaticResource DataGridCellStyle}" Binding="{Binding TotalBets}" Width="30*"/>
<DataGridTextColumn Header="Min" Binding="{Binding MatchMin}" Width="30*" />
<DataGridTextColumn Header="Lig" Binding="{Binding TeamName}" Width="70*" />
<DataGridTemplateColumn Header="Durum" Width="Auto" >
<DataGridTemplateColumn.CellTemplate>
<DataTemplate>
<ToggleButton x:Name="toggleBtn" VerticalAlignment="Center" Margin="0" Style="{StaticResource SlidingToggleButton}" BorderBrush="{x:Null}" IsChecked="{Binding ToggleBtn}" Background="#FF2F63FF" />
</DataTemplate>
</DataGridTemplateColumn.CellTemplate>
</DataGridTemplateColumn>
</DataGrid.Columns>
<DataGrid.RowDetailsTemplate x:Uid="test123">
<DataTemplate x:Name="testTemplete">
<DataGrid x:Name="innerGrid" ItemsSource="{Binding SubBetMatchDataListforChildGrid}"
Style="{StaticResource EfesDataGridStyle}" Margin="50,2,2,2" MinHeight="40"
GridLinesVisibility="All" HorizontalGridLinesBrush="#DADADA" VerticalGridLinesBrush="#DADADA"
Visibility="Collapsed" >
<DataGrid.Columns>
<DataGridTextColumn Header="Kod" Binding="{Binding Code}" Width="3*" />
<DataGridTextColumn Header="Alt Secenakler" Binding="{Binding SubOptions}" Width="7*" />
</DataGrid.Columns>
</DataGrid>
</DataTemplate>
</DataGrid.RowDetailsTemplate>
</DataGrid>
最佳答案
I am using MVVM and I am binding both the Datagrid s by ObservableCollections on Viewmodel.
你应该只有一个
ObservableCollection
( MatchObsCollection
) 在您的 ViewModel 中。如果您有
MatchObsCollection
和 SubBetMatchDataListforChildGrid
在 ViewModel 中,此代码不起作用。DataContext
的RowDetails
是行项目。所以如果你想绑定(bind)到
ObservableCollection
在 ViewModel 中,您应该在 RowDetailsTemplate
中使用以下代码:...
<DataGrid.RowDetailsTemplate x:Uid="test123">
<DataTemplate x:Name="testTemplete">
<DataGrid x:Name="innerGrid"
ItemsSource="{Binding Path=DataContext.SubBetMatchDataListforChildGrid, RelativeSource={RelativeSource Mode=FindAncestor, AncestorType={x:Type Window}}}"
...
如果要绑定(bind)到选定的对象内部
ObservableCollection
您的类(class)应如下所示:class Foo
{
public int MatchNo { get; set; }
public DateTime MatchDate { get; set; }
// more properties
public ObservableCollection<Boo> SubBetMatchDataListforChildGrid { get; set; }
}
class Boo
{
public string Code { get; set; }
public string SubOptions { get; set; }
}
在 ViewModel 中你应该有
ObservableCollection
富:class MainViewModel
{
public ObservableCollection<Foo> MatchObsCollection { get; set; }
}
关于wpf - 父子数据网格在 MVVM 中具有不同的 ItemsSource,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18805893/