【问题标题】:How to refresh all my IQueryable<EntityObject> type properties如何刷新我的所有 IQueryable<EntityObject> 类型属性
【发布时间】:2013-01-11 11:12:21
【问题描述】:

我需要刷新我所有的IQueryable&lt;EntityObject&gt; 类型属性。

我知道您可以通过以下方式刷新集合:

someObjectContext.Refresh(System.Data.Objects.RefreshMode.StoreWins, someEntityObject);

但我无法获取所有属性:

//Here i want to get all the propeties    
var iQueryablePropertiesList = ViewModel.GetType().GetProperties().Where(x => x.GetType().BaseType is IQueryable<EntityObject>);

//Here i want to loop through all the properties and refresh them
foreach (var item in iQueryablePropertiesList)
{
    someObjectContext.Refresh(System.Data.Objects.RefreshMode.StoreWins, item.GetValue(this, null));
}

//Fire PropertyChanged for all properties
OnPropertyChanged(String.Empty);

iQueryablePropertiesList 没有结果。

原因是我需要刷新所有绑定 ComboBoxes 的集合。

这么说来:

  1. 这是刷新 ViewModel 中所有集合的正确方法吗?
  2. 如果不是,我应该如何解决我的问题?
  3. 如果是,我需要添加什么LINQ 查询才能获得我想要的结果?

【问题讨论】:

    标签: c# .net wpf entity-framework mvvm


    【解决方案1】:

    你在线出错:

    x => x.GetType().BaseType is IQueryable<EntityObject>
    

    BaseType 的类型是 Type,它永远不会是 IQueryable&lt;EntityObject&gt;x.GetType() 也将返回一个类型,在这种情况下 PropertyInfo 总是。

    你要输入的是:

    x => typeof(IQueryable<EntityObject>).IsAssignableForm(x.PropertyType)
    

    这将检查 IQueryable&lt;EntityObject&gt; 是否由属于您的属性的类型实现。

    public ThisType PropertyName{get;set;} 
    

    至于这是否是一个好方法,我不认为反思总是一个问题,它迟早会咬你。我会简单地重新创建模型。

    【讨论】:

    • “反思总是一个问题,它迟早会咬你”。可以提供参考吗?
    • BaseType 这个东西还有必要吗?我想可以询问IsAssignableForm(x.PropertyType)
    • @Clemens 真的没有。我认为这是我 5 年的演讲经验。但是不要误会我的意思,我会在需要的地方使用反射,但如果可能的话,我倾向于用另一种方式来做。对于这个问题,有一个简单的解决方案,即使用最初创建的相同方法创建视图模型。是的,BaseClass 不是必需的。
    • @Rafal x.PropertyType.BaseType 为空,但 x.PropertyType 有效。
    猜你喜欢
    • 2012-02-07
    • 1970-01-01
    • 2012-04-04
    • 1970-01-01
    • 1970-01-01
    • 2019-12-12
    • 1970-01-01
    • 2012-02-25
    • 1970-01-01
    相关资源
    最近更新 更多