8wDlpd.png
8wDFp9.png
8wDEOx.png
8wDMfH.png
8wDKte.png

使用自定义列表的 ItemSource 之前,Items 集合必须为空

Geoff Griswald 1月前

31 0

在我的 ResultEntity 类中,如果我这样做:_resultMulti = new List ();我看到以下错误消息:\'异常:在使用 ItemSource 之前,Items 集合必须为空。\' 我有...

在我的课堂上, ResultEntity 如果我这样做:

_resultMulti = new List<ResultTaskFund>(); 

我看到以下错误消息:

"Exception: Items collection must be empty before using ItemSource."

我看到很多人也遇到过此错误消息,我也读过帖子,但我不明白为什么会看到此消息。如果我只是声明 _resultMulti 而不初始化新列表,应用程序就会加载。但我不明白为什么?

我有以下课程:

结果摘要

 public class ResultEntity : INotifyPropertyChanged
    {

        public List<ResultTaskFund> ResultsMulti
        {
            get { return _resultsMulti; }
            set { _resultsMulti = value; OnPropertyChanged("ResultsMulti"); }
        }

        List<ResultTaskFund> _resultMulti;


        public event PropertyChangedEventHandler PropertyChanged;

        private void OnPropertyChanged(string propertyName)
        {
            if (PropertyChanged != null)
                PropertyChanged(this, new PropertyChangedEventArgs(propertyName));
        }
    }

结果任务基金

 public class ResultTaskFund : INotifyPropertyChanged
    {            
        public string TaskName { get; set; }
        public ResultFund ABBC { get; set; }
        public ResultFund BBCA { get; set; }
        public ResultFund CCCA { get; set; }         
    }

成果基金

    public class ResultFund
    {
        public string FundCode { get; set; }
        public ErrorAndWarningCodes  ErrCode { get; set; }
        public bool FundRequried { get; set; }
        public bool CheckRequired { get; set; }
        public string DisplayString { get; set; }
    }

XAML

 <DataGrid Grid.Row="0"
                      DataContext="{Binding ResultSummary}"
                      x:Name="dataGridResultMulti"
                      ItemsSource="{Binding ResultsMulti, UpdateSourceTrigger=PropertyChanged}"
                      Style="{StaticResource DataGridTemplate}"
                      ColumnHeaderStyle="{StaticResource DG_ColumnHeader}"                                            
                      RowStyle="{StaticResource DG_Row}"
                      CellStyle="{StaticResource DG_Cell}"                                    
                      RowDetailsTemplate="{StaticResource DG_RowDetail}" 
                      RowHeaderStyle="{StaticResource DG_RowHeader}"
                      AutoGenerateColumns="False"
                      HorizontalAlignment="Stretch" 
                      VerticalAlignment="Stretch"
                      Background="Silver"
                      RowHeaderWidth="30"                      
                      Margin="25,5,20,15">
                <DataGrid.Columns>
                    <DataGridTextColumn Header="Task" IsReadOnly="True" Binding="{Binding TaskName}"/>
                    <DataGridTextColumn Header="ABBC" IsReadOnly="True" Binding="{Binding ABBC.DisplayString}"/>
                    <DataGridTextColumn Header="BBCA" IsReadOnly="True" Binding="{Binding BBCA.DisplayString}"/>
                    <DataGridTextColumn Header="CCCA" IsReadOnly="True" Binding="{Binding CCCA.DisplayString}"/>
                    <DataGrid.Columns>
            </DataGrid>
帖子版权声明 1、本帖标题:使用自定义列表的 ItemSource 之前,Items 集合必须为空
    本站网址:http://xjnalaquan.com/
2、本网站的资源部分来源于网络,如有侵权,请联系站长进行删除处理。
3、会员发帖仅代表会员个人观点,并不代表本站赞同其观点和对其真实性负责。
4、本站一律禁止以任何方式发布或转载任何违法的相关信息,访客发现请向站长举报
5、站长邮箱:yeweds@126.com 除非注明,本帖由Geoff Griswald在本站《wpf》版块原创发布, 转载请注明出处!
最新回复 (0)
  • 您在哪里声明了 ResultsFunds?是在另一个 VM 还是类中?您能向我们展示那个类吗?

  • 抱歉。我正在使用多个数据网格,似乎复制了错误的数据网格。更新了我的代码,它基本上应该是 ResultsMulti 而不是 ResultsFunds

  • 您正在 DataGridTextColumns 直接将 添加到 的项目 DataGrid ,因此您正在设置 Items ItemsSource 属性,并且您只能同时使用一个。使用 Columns 附加属性修复您的列配置:

    <DataGrid.Columns>
        <DataGridTextColumn Header="Task" IsReadOnly="True" Binding="{Binding TaskName}"/>        
        <DataGridTextColumn Header="ABBC" IsReadOnly="True" Binding="{Binding ABBC.DisplayString}"/>
        <DataGridTextColumn Header="BBCA" IsReadOnly="True" Binding="{Binding BBCA.DisplayString}"/>
        <DataGridTextColumn Header="CCCA" IsReadOnly="True" Binding="{Binding CCCA.DisplayString}"/>
    </DataGrid.Columns>
    
  • 啊,是的!数据网格上的标题现在已加载。但是,如果我有 _resultMulti = new List()那么它仍然会给我相同的错误信息吗?

  • 包装您的列定义 DataGrid.Columns 。由于您使用 ItemsSource 绑定它,因此您不能在定义中放置任何直接内容。它将您的列视为不能与 ItemsSource 集合一起使用的网格项目。

返回
作者最近主题: