Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/256.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 在RowDetailsTemplate中的DataGrid中选择EdItem不可访问_C#_Mvvm - Fatal编程技术网

C# 在RowDetailsTemplate中的DataGrid中选择EdItem不可访问

C# 在RowDetailsTemplate中的DataGrid中选择EdItem不可访问,c#,mvvm,C#,Mvvm,我有一个DataGrid,它包含许多对象。在该数据网格中,我有一个rowtailstemplate来容纳所有层次结构数据。我希望能够从DataGrid中选择对象,但到目前为止,我还没有使用下面的代码 <DataGrid x:Name="leagueList" Grid.Row="1" ItemsSource="{Binding Leagues}" SelectedItem="{Binding SelectedLeague}" Margin="0,0,5,

我有一个
DataGrid
,它包含许多对象。在该数据网格中,我有一个
rowtailstemplate
来容纳所有层次结构数据。我希望能够从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>
当我运行我的应用程序时,当我选择一个团队时,我甚至不会得到
MessageBox
弹出窗口,但我应该这样做


整个网格已正确填充,我无法从内部数据网格获取SelectedItem。

由于它位于模板内,因此很难绑定所选项目, 您可以使用RelativeSource,下面是语法和示例

SelectedItem = {Binding Path=SelectedTeam, RelativeSource={RelativeSource AncestorType={x:Type typeOfAncestor}}}
typeOfAncestor:-祖先类型是在Xaml声明中为其提供名称空间的类的类型,该名称空间是viewmodel的名称空间

例如:

xmlns:local="clr-namespace:WpfApp2" 
它需要位于xaml页面的顶部

SelectedItem = {Binding Path=SelectedTeam, RelativeSource={RelativeSource AncestorType={x:Type local:ViemModelName}}}
相对源与属性相关或指向属性。 现在,SelectedTeam从视图模型绑定到这个SelectedItem属性

希望这对你有帮助。
谢谢,

在使用了简的评论和萨蒂什的回答之后,我找到了解决方案

子级
DataGrid
需要找到其父级的DataContext,因此使用
RelativeResource
指向
UserControl
类型将起作用,然后在我的属性类型前面插入
DataContext
。因此,代码的
SelectedItem
行显示如下:

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

我想这可能就是问题所在:
SelectedItem="{Binding Path=DataContext.SelectedTeam, RelativeSource={RelativeSource FindAncestor, AncestorType={x:Type UserControl}}}"