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}}}"