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; } } 
}

0 ответов

Другие вопросы по тегам