首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >嵌套在DataGrid问题中的DataGrid

嵌套在DataGrid问题中的DataGrid
EN

Stack Overflow用户
提问于 2017-01-06 04:02:44
回答 1查看 422关注 0票数 1

我收到一个“使用ItemsSource时操作无效。改为使用ItemsControl.ItemsSource访问和修改元素”错误,但我不确定原因。

我正在尝试将一个数据网格嵌套在一个数据网格中。如果我只是使用一个文本块,这没有问题,但一旦我赋值并单击其中一个父datagrid元素,我就会得到上面的错误。

下面是我的xaml:

代码语言:javascript
复制
    <DataGrid Grid.Row="1" Name="dgSREducation" Background="White" AutoGenerateColumns="False" CanUserAddRows="False" HorizontalAlignment="Left">
     <DataGrid.Columns>
        <DataGridTextColumn Header="Description" Binding="{Binding Description}"/>
        <DataGridTextColumn Header="Link" Binding="{Binding Link}"/>
        <DataGridTextColumn Header="Type" IsReadOnly="True" Binding="{Binding Type}"/>
        <DataGridCheckBoxColumn Header="Active" Binding="{Binding Active}"/>
     </DataGrid.Columns>
     <DataGrid.RowDetailsTemplate>
        <DataTemplate>
           <StackPanel>
              <DataGrid ItemsSource="{Binding Conditions}" AutoGenerateColumns="False" CanUserAddRows="False">
                 <DataGridTextColumn Header="Notification Type" IsReadOnly="True" Binding="{Binding Notification}"/>
                 <DataGridTextColumn Header="Value" Binding="{Binding Value}"/>
                 <DataGridTextColumn Header="Compare Type" IsReadOnly="True" Binding="{Binding Compare}"/>
                 <DataGridCheckBoxColumn Header="Active" Binding="{Binding Active}"/>
              </DataGrid>
              <TextBlock Text="{Binding Words}"></TextBlock>
           </StackPanel>
        </DataTemplate>
     </DataGrid.RowDetailsTemplate>
     <DataGrid.Resources>
        <Style TargetType="DataGridRow">
           <EventSetter Event="MouseLeftButtonDown" Handler="Education_Click"/>
        </Style>
        <SolidColorBrush x:Key="{x:Static SystemColors.ControlBrushKey}" Color="{x:Static SystemColors.HighlightColor}"></SolidColorBrush>
     </DataGrid.Resources>
  </DataGrid>

对于这一切,我的类是:

代码语言:javascript
复制
class SREducationData
{
   public NamedIDData Type { get; set; }
   public bool Active { get; set; }
   public string Link { get; set; }
   public string Description { get; set; }
   public long ID { get; set; }
   public ObservableCollection<ConditionData> Conditions { get; set; }

   public string Words { get; set; }
}

和:

代码语言:javascript
复制
class ConditionData
{
   public long ID { get; set; }
   public NamedIDData Notification { get; set; }
   public bool Active { get; set; }
   public string Value { get; set; }
   public NamedIDData Compare { get; set; }
}

当我的程序最初加载时,我在代码中通过执行dgSREducation.ItemsSource = display;来设置ItemSource,其中display为ObservableCollection<SREducationData> display;

只要我单击dgSREducation的一个元素,我就会得到错误消息,并且在该元素下面会出现一个空白的datagrid。对发生了什么有什么想法吗?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2017-01-06 05:06:26

糟糕,您没有将嵌套的datagrid的列放在中。

更改:

代码语言:javascript
复制
<DataGrid ItemsSource="{Binding Conditions}" AutoGenerateColumns="False" CanUserAddRows="False">
    <DataGridTextColumn Header="Notification Type" IsReadOnly="True" Binding="{Binding Notification}"/>
    <DataGridTextColumn Header="Value" Binding="{Binding Value}"/>
    <DataGridTextColumn Header="Compare Type" IsReadOnly="True" Binding="{Binding Compare}"/>
    <DataGridCheckBoxColumn Header="Active" Binding="{Binding Active}"/>
</DataGrid>

至:

代码语言:javascript
复制
<DataGrid ItemsSource="{Binding Conditions}" AutoGenerateColumns="False" CanUserAddRows="False">
    <DataGrid.Columns>
        <DataGridTextColumn Header="Notification Type" IsReadOnly="True" Binding="{Binding Notification}"/>
        <DataGridTextColumn Header="Value" Binding="{Binding Value}"/>
        <DataGridTextColumn Header="Compare Type" IsReadOnly="True" Binding="{Binding Compare}"/>
        <DataGridCheckBoxColumn Header="Active" Binding="{Binding Active}"/>
    </DataGrid.Columns>
</DataGrid>
票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/41493703

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档