【问题标题】:Databinding in Silverlight with RIA ServicesSilverlight 中的数据绑定与 RIA 服务
【发布时间】:2011-02-18 00:27:09
【问题描述】:

我正在尝试在组合框中显示表格的内容。

我正在使用 MVVM 模式,并且在我的 viewmodel 类中,如果我写这个它可以工作:

private IEnumerable<EventType> _eventTypes;

public ManageProfileModel()
        {
            _referenceData = new ReferenceDataContext();

            _referenceData.Load(_referenceData.GetEventTypesQuery(), false);

            _eventTypes = _referenceData.EventTypes;
        }

像这样组合框正在显示数据。

但是,我希望 _eventTypes 是一个列表:

private List<EventType> _eventTypes;

但如果我这样写:

public ManageProfileModel()
        {
            _referenceData = new ReferenceDataContext();

            _referenceData.Load(_referenceData.GetEventTypesQuery(), false);

            _eventTypes = _referenceData.EventTypes.ToList();
        }

然后组合框为空。这有什么问题?

我想使用列表,因为我希望能够在列表中添加和删除数据。

最好的问候。

【问题讨论】:

    标签: c# data-binding silverlight-4.0 ria


    【解决方案1】:

    如果我没记错的话,你不能直接将 IEnumerable 转换为 IList。这有点棘手。我将使用以下链接中的选项。因为我遇到了同样的问题,所以我把它放在书签里。 http://devlicio.us/blogs/derik_whittaker/archive/2008/03/28/simple-way-to-convert-ienumerable-lt-entity-gt-to-list-lt-ientity-gt.aspx

    或查看此链接

    http://social.msdn.microsoft.com/Forums/en-US/adodotnetentityframework/thread/af225aa0-1cf4-40dd-ac3e-e7a19edaef00

    【讨论】:

      【解决方案2】:

      DomainContext.Load 是异步的,因此在第二个示例中,您正在创建一个很可能为空的列表,因为 EntitySet 尚未完成加载。使用StackOverflowException 发布的代码推迟创建列表,直到EntitySet 被填充并且它应该可以工作。

      【讨论】:

        【解决方案3】:

        只是从头部直接射击......

        您是否尝试为您的列表添加诸如 propertychanged 事件之类的内容? 所以可能是数据是异步的,并且没有通知属性有关更改...

        就像我说的......

         private List<EventType> _eventTypes;
         public List<EventType> EventTypes
            {
                get { return _eventTypes; }
                set
                {
                    _eventTypes = value;
                    RaisePropertyChanged("EventTypes");
                }
            }
        

        并看看 ObservableCollections...

        就像我说的一样...

        希望对你有帮助

        【讨论】:

          【解决方案4】:

          我没有太多的 MVVM 曝光,但使用 silverlight + RIA,我通常会做这样的事情。

          private List<EventType> _eventTypes;
          public ManageProfileModel()
          {
              _referenceData = new ReferenceDataContext();
          
              var op = _referenceData.Load(_referenceData.GetEventTypesQuery(), false);
              op.Completed += op_Completed;
          
          }
          
          void po_Completed(object sender, EventArgs e)
          {
              var op = ( InvokeOperation<IEnumerable<EventType>>)sender;
              _eventTypes = op.Value.ToList();
          }
          

          【讨论】:

            猜你喜欢
            • 2011-02-05
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 2011-07-09
            • 1970-01-01
            • 1970-01-01
            相关资源
            最近更新 更多