none
XML文件读取 Metro C# MVVM模式 RRS feed

  • 问题

  • 用了异步读取XML文件  (后台具体代码就不粘贴了)

            async void getAllBusiness()
            {
                //异步读取 防止线程阻塞 并绑定到数据源控件
                List<Business> lstBusiness = await XmlHelper<Business>.XmlToEntityList("Common", "BusinessConfig.xml");       
     
            }

     lstBusiness 是可以读取到了  但是项目应用了MVVM模式 需要在Services层(有接口BusinessServicecs.cs, IBusinessService.cs) 的BusinessServicecs.cs里写个IList方法获取Xml中的数据集合  但是读取Xml是用了异步读取  导致返回类型相互矛盾  代码如下

         public interface IBusinessService
        {
            //获取TouchMainPage业务 
            IList<Business> getBusiness();
        }

       public class BusinessServicecs : IBusinessService
        {

            public IList<Business> getBusiness()
            {
                List<Business> businessList = await XmlHelper<Business>.XmlToEntityList("Common", "BusinessConfig.xml"); 
                return businessList;
            }

        }

    上面的代码可看出  运用了接口  读取Xml是用了异步读取 导致返回类型与异步方法之间相互矛盾  不知该怎那么解决  


    _____L.Y.H先生

    2012年8月6日 8:41

答案

  • Hi,

    从你的代码看我想问题就是List<T>和IList<T>不匹配的问题。实际上List<T>中已经实现了IList接口,而IList中又实现了ICollection和IEnumerable接口,因此List大部分方法都可以在IList中使用。

    getBusiness()中直接将List<Business>替换成IList<Business>即可。


    Aaron Xue [MSFT]
    MSDN Community Support | Feedback to us
    Get or Request Code Sample from Microsoft
    Please remember to mark the replies as answers if they help and unmark them if they provide no help.

    • 已标记为答案 Mr Lou 2012年8月9日 1:35
    2012年8月8日 5:03
    版主

全部回复

  • Hi,

    从你的代码看我想问题就是List<T>和IList<T>不匹配的问题。实际上List<T>中已经实现了IList接口,而IList中又实现了ICollection和IEnumerable接口,因此List大部分方法都可以在IList中使用。

    getBusiness()中直接将List<Business>替换成IList<Business>即可。


    Aaron Xue [MSFT]
    MSDN Community Support | Feedback to us
    Get or Request Code Sample from Microsoft
    Please remember to mark the replies as answers if they help and unmark them if they provide no help.

    • 已标记为答案 Mr Lou 2012年8月9日 1:35
    2012年8月8日 5:03
    版主
  •  根据你的提示 我修改了代码

        public interface IBusinessService
        {
            //获取TouchMainPage业务 
            Task<IList<Business>> getBusiness();
        }

            async public Task<IList<Business>> getBusiness()
            {
                //异步读取 防止线程阻塞 并绑定到数据源控件
                IList<Business> businessList = await XmlHelper<Business>.XmlToEntityList("Common", "BusinessConfig.xml");   
                return businessList;
            }

    Thank You!


    _____L.Y.H先生

    2012年8月9日 1:37
  •  你好 Aaron Xue 下面这个问题  不太明白 没接触过  帮忙解答下吧 


    _____L.Y.H先生

    2012年8月9日 2:35
  • Hi,

    可以这样改:

    var business=await bs.getBusiness();(方法前要加async)

    异步操作你可以看看这篇文档:

    http://msdn.microsoft.com/en-us/library/windows/apps/hh452713.aspx


    Aaron Xue [MSFT]
    MSDN Community Support | Feedback to us
    Get or Request Code Sample from Microsoft
    Please remember to mark the replies as answers if they help and unmark them if they provide no help.


    2012年8月9日 5:33
    版主
  • 你好! Aaron Xue   所有问题都解决了  非常感谢!

    _____L.Y.H先生

    2012年8月9日 5:38