我收到一个“使用ItemsSource时操作无效。改为使用ItemsControl.ItemsSource访问和修改元素”错误,但我不确定原因。
我正在尝试将一个数据网格嵌套在一个数据网格中。如果我只是使用一个文本块,这没有问题,但一旦我赋值并单击其中一个父datagrid元素,我就会得到上面的错误。
下面是我的xaml:
<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>对于这一切,我的类是:
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; }
}和:
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。对发生了什么有什么想法吗?
发布于 2017-01-06 05:06:26
糟糕,您没有将嵌套的datagrid的列放在中。
更改:
<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>至:
<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>https://stackoverflow.com/questions/41493703
复制相似问题