Невозможно связать ObjectContext из DataContext с пользовательским вложенным свойством - PullRequest
0 голосов
/ 26 марта 2011

У меня есть свойство

    public static ObjectContext GetObjectContext(DataGrid obj)
    {
        return (ObjectContext)obj.GetValue(ObjectContextProperty);
    }

    public static void SetObjectContext(DataGrid obj, ObjectContext value)
    {
        obj.SetValue(ObjectContextProperty, value);
    }

    public static readonly DependencyProperty ObjectContextProperty =
        DependencyProperty.RegisterAttached("ObjectContext", typeof(ObjectContext), typeof(FilterableGrid));

И у меня также есть ViewModel, у которого есть свойство Context, для которого установлено правильное значение ObjectContext (проверено с помощью отладчика).

И этот код XAML:

<DataGrid AutoGenerateColumns="False" Name="gridOrders"
              local:FilterableGrid.ObjectContext="{Binding Context}" local:FilterableGrid.IsFilterableGrid="True">

Где local - мое пространство имен.

Я использую этот код в событии с переменными именами IsFilterableGrid (поведение atached) для извлечения контекста объекта:

ObjectContext context = FilterableGrid.GetObjectContext(sourceGrid);

И переменная контекста всегда заканчиваетсядо нуля.Хотя DataContext для сетки не является нулевым и указывает на правильный объект (ViewModel).

Есть идеи?Кажется, я теряю рассудок ...

Редактировать: Я немного больше исследовал, и если я связываю local:FilterableGrid.IsFilterableGrid="{Binding IsFilterable}", это работает отлично.Но local:FilterableGrid.ObjectContext="{Binding Context}" просто нет!Может быть, это как-то связано с типом передаваемого значения (ObjectContext вместо string или скажем, bool, которые являются примитивными типами?)?

1 Ответ

0 голосов
/ 13 апреля 2011

Я наконец-то решил эту проблему, даже не зная, что помогло - похоже, это была ошибка в .NET или VSи добавил OnChanged делегат.После этого он только начал работать (привязка правильно).Когда я затем удалил метаданные свойства из вызова RegisterAttached, он продолжал работать.

Так что я действительно не знаю, что это было, но теперь это работает.

...