WPF MVVM动态可观察集合绑定到数据网格

WPF MVVM动态可观察集合绑定到数据网格,wpf,c#-4.0,mvvm,Wpf,C# 4.0,Mvvm,我的wpf mvvm应用程序中有一个独特的问题。 我的应用程序中有一个gridcontrol(视图),我必须为其绑定一个可观察的集合。对于不同的客户,我有不同的可观察收集。根据客户端的不同,我必须在gridcontrol(视图)上加载数据。因此,通过gridControl(视图)上的一个绑定,我如何实现这一点 <dxg:GridControl ItemsSource="{Binding CommonBindingType??????}"> </dxg:GridContr

我的wpf mvvm应用程序中有一个独特的问题。 我的应用程序中有一个
gridcontrol
(视图),我必须为其绑定一个可观察的集合。对于不同的客户,我有不同的可观察收集。根据客户端的不同,我必须在gridcontrol(视图)上加载数据。因此,通过gridControl(视图)上的一个绑定,我如何实现这一点

<dxg:GridControl 
ItemsSource="{Binding CommonBindingType??????}">   
</dxg:GridControl>

包装动态视图模型的方法多种多样,但大多数都使用.NET 4.0动态类型或ExpandooObject

您需要装箱通用viewmodels,它在运行时非常有用,并将此通用viewmodel与视图中的控件绑定

您可以遵循以下方法/示例:

(一)

(二)

只需在视图模型上创建一个属性,作为对正确集合的引用

<dxg:GridControl ItemsSource="{Binding CollectionSource}" />

当然,请在我的源代码中填入appropiate InotifyProperty更改:

public class YourViewModel
{
    public ObservableCollection<blah> Source1 { get; set; }
    public ObservableCollection<blah> Source2 { get; set; }
    public ObservableCollection<blah> CollectionSource { get; set; }
    public YourViewModel()
    {
        CollectionSource = Source1;
    }
    public void ChangeToSource2()
    {
        CollectionSource = Source2;
    }
}
公共类YourViewModel
{
公共ObservableCollection Source1{get;set;}
公共ObservableCollection Source2{get;set;}
公共ObservableCollection集合源{get;set;}
公共视图模型()
{
CollectionSource=Source1;
}
公开作废更改资源2()
{
CollectionSource=Source2;
}
}
如果您的集合是不同的泛型类型,那么CollectionSource应该是更泛型的,比如

public IEnumerable<object> CollectionSource { get; set; }
public IEnumerable CollectionSource{get;set;}

但是不同的泛型类型及其不同的属性呢?类型blah1有Prename,而blah2有Price和Amount。我认为这不重要,WPF在运行时绑定并使用对象,它在编译时不做任何检查。实际上,只需将CollectionSource设置为对象,不需要IEnumerable。WPF会解决剩下的问题。谢谢Joel Lucsy的精彩回答:):)但我有另一个问题。当我将数据加载到网格时,很少有对象(不是变量)也会填充为我不需要的列。请帮助我,我通过使用INotifyPropertyChanged和IDictionary扩展DynamicObject成功地实现了这一点。但是,INotifyDataErrorInfo没有从字典中的单个项中提取验证错误,因此我正在寻找替代解决方案。