Binding ListCollectionView, содержащий динамические объекты, не показывает столбцы в сетке WPF
Я пользуюсь телериком RadGridView
с моделью представления, которая происходит от DynamicObject
,
Когда эта модель представления связана с сеткой через ObservableCollection<T>
все столбцы отображаются должным образом, но когда наблюдаемая коллекция используется в качестве источника для ListCollectionView, а затем она привязывается к сетке, столбцы НЕТ не отображаются.
Как мне заставить ListCollectionView работать с динамическими объектами и элементами управления сеткой?
Пример показан ниже, когда я связываю "AllItems", тогда отображаются столбцы "Value1" и "Value2", но когда я связываю FilteredItems, столбцы не отображаются.
public abstract class BaseViewModel<T> : DynamicObject
{
}
public class MyItemViewModel : BaseViewModel<MyItem>
{
private MyItem _myItem;
public MyItemViewModel(int i)
{
_myItem = new MyItem();
_myItem.Value1 = "Ollie " + i;
_myItem.Value2 = 42 + i;
}
public override IEnumerable<string> GetDynamicMemberNames()
{
return new[] {"Value1", "Value2"};
}
public override bool TryGetMember(GetMemberBinder binder, out object result)
{
if (binder.Name == "Value1")
{
result = _myItem.Value1;
return true;
}
else if (binder.Name == "Value2")
{
result = _myItem.Value2;
return true;
}
return base.TryGetMember(binder, out result);
}
public override bool TrySetMember(SetMemberBinder binder, object value)
{
if (binder.Name == "Value1")
{
_myItem.Value1 = (string)value;
return true;
}
else if (binder.Name == "Value2")
{
_myItem.Value2 = (int)value;
return true;
}
return base.TrySetMember(binder, value);
}
}
public class TestHarness
{
private readonly ObservableCollection<MyItemViewModel> _items = null;
private readonly ICollectionView _filteredItems = null;
public TestHarness()
{
_items = new ObservableCollection<MyItemViewModel>();
_filteredItems = new MyListCollectionView(_items);
_items.Add(new MyItemViewModel(1));
_items.Add(new MyItemViewModel(2));
_items.Add(new MyItemViewModel(3));
}
public IEnumerable<MyItemViewModel> AllItems { get { return _items; } }
public IEnumerable FilteredItems { get { return _filteredItems; } }
}