gpt4 book ai didi

c# - 从 RowDetailsTemplate 中的 DataGrid 无法访问 SelectedItem

转载 作者:行者123 更新时间:2023-12-03 10:32:24 25 4
gpt4 key购买 nike

我有一个 DataGrid其中包含许多对象。在那个 DataGrid 中,我有一个 RowDetailsTemplate容纳所有分层数据。我希望能够从该 DataGrid 中选择对象,但到目前为止,以下代码还没有任何运气

    <DataGrid x:Name="leagueList" Grid.Row="1" ItemsSource="{Binding Leagues}" SelectedItem="{Binding SelectedLeague}"
Margin="0,0,5,0" ColumnWidth="1*"
CanUserAddRows="False" AutoGenerateColumns="False" IsReadOnly="True" CanUserReorderColumns="False" CanUserSortColumns="False">
<DataGrid.Resources>
<utility:SubtractValueConverter x:Key="SubtractValueConverter"/>
</DataGrid.Resources>
<DataGrid.RowHeaderTemplate>
<DataTemplate>
<Expander Expanded="Expander_Expanded" Collapsed="Expander_Collapsed"/>
</DataTemplate>
</DataGrid.RowHeaderTemplate>
<DataGrid.Columns>
<DataGridTextColumn Header="League" Binding="{Binding Name}"/>
<DataGridTextColumn Header="Initials" Binding="{Binding Initials}"/>
</DataGrid.Columns>
<DataGrid.RowDetailsTemplate>
<DataTemplate DataType="{x:Type models:Team}">
<DataGrid ItemsSource="{Binding Teams}" SelectedItem="{Binding Path=SelectedTeam, UpdateSourceTrigger=PropertyChanged}"
CanUserAddRows="False" AutoGenerateColumns="False" IsReadOnly="True" GridLinesVisibility="All"
Width="{Binding ActualWidth,ElementName=leagueList, Converter={StaticResource SubtractValueConverter}, ConverterParameter=50}" HorizontalAlignment="Stretch" ColumnWidth="*" Margin="1,1,1,1" BorderThickness="2">
<DataGrid.Columns>
<DataGridTextColumn Header="Nickname" Binding="{Binding Nickname}"/>
</DataGrid.Columns>
</DataGrid>
</DataTemplate>
</DataGrid.RowDetailsTemplate>
</DataGrid>
SelectedTeam属性是我想要在 Team 时调用的内容被选中,但它似乎没有绑定(bind)到该属性,即使我这样指定它也是如此。
    public Team SelectedTeam
{
get => _SelectedTeam;
set
{
_SelectedTeam = value;
System.Windows.MessageBox.Show("Selected Team is: " + _SelectedTeam.Nickname);
RaisePropertyChangedEvent("SelectedTeam");
}
}

当我运行我的应用程序时,我什至没有得到 MessageBox当我选择一个团队时弹出,但我应该。

整个网格正确填充,我只是无法从内部 DataGrid 中获取 SelectedItem。

最佳答案

在使用了 Jan 的评论后 link和 Satish 的答案,我找到了解决方案。

child DataGrid需要找到它的父级的DataContext,所以使用RelativeResource指向UserControl type 将起作用,然后插入 DataContext在我的属性(property)类型前面。所以SelectedItem代码行如下所示:

SelectedItem="{Binding Path=DataContext.SelectedTeam, RelativeSource={RelativeSource FindAncestor, AncestorType={x:Type UserControl}}}"

关于c# - 从 RowDetailsTemplate 中的 DataGrid 无法访问 SelectedItem,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52583307/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com