Невозможно связать ObjectContext из DataContext с пользовательским вложенным свойством

Я прикрепил собственность

    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">

Где локально мое пространство имен.

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

ObjectContext context = FilterableGrid.GetObjectContext(sourceGrid);

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

Есть идеи? Я, кажется, теряю здравомыслие из-за этого...

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

1 ответ

Я наконец-то решил эту проблему, даже не зная, что помогло - похоже, это была ошибка в.NET или, возможно, VS.

Я сделал следующее: добавил метаданные свойства к вызову RegisterAttached и добавил делегат OnChanged. После этого он только начал работать (привязка правильно). Когда я затем удалил метаданные свойства из вызова RegisterAttached, он продолжал работать.

Поэтому я действительно не знаю, что это было, но сейчас это работает.

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