Прикрепленный порядок свойств

В каком порядке применяются прикрепленные свойства к объекту? Я думаю, что я должен игнорировать это, но вот мой сценарий: у меня есть прикрепленное свойство, чтобы прикрепить виртуальную машину к представлению, а затем еще одно присоединенное свойство, которое зависит от первого. Я пытаюсь понять, что произойдет, если второе настроено раньше первого, но я не могу получить ошибку! т.е. первое (модель) всегда устанавливается перед вторым, какой бы порядок в xaml. Кто управляет порядком присвоения? Могу ли я изменить это?

Теперь я имею дело с поздним назначением, подписавшись на событие proeprty change:

DependencyPropertyDescriptor dd = DependencyPropertyDescriptor.FromProperty(FrameworkElement.DataContextProperty,depo.GetType());
            dd.AddValueChanged(depo, (s, a) =>
            {
                ChangeDatacontext(s as DependencyObject);
            }

и для имитации проблемы я вручную устанавливаю новый текстовый текст для объекта.

Спасибо Феликс

1 ответ

Я не могу прямо ответить на этот вопрос, потому что я никогда не полагаюсь на то, какое свойство установлено раньше другого, но вы можете управлять вещами с помощью метода, который используют оба прикрепленных свойства.

Вот пример из моего текущего кода:

    public static readonly DependencyProperty RuleVMProperty =
        DependencyProperty.RegisterAttached("RuleVM", typeof(DocumentRuleViewModel), typeof(DocumentRuleViewModel), new UIPropertyMetadata(null, RuleVMChanged));

    public static void RuleVMChanged(DependencyObject sender, DependencyPropertyChangedEventArgs args)
    {
        var el = GetRefid(sender);
        var vm = args.NewValue as DocumentRuleViewModel;
        if(vm==null)
            return;
        vm.SetDocumentFromRefid(sender, el);
    }

    public static readonly DependencyProperty RefidProperty =
        DependencyProperty.RegisterAttached("Refid", typeof(XmlElement), typeof(DocumentRuleViewModel), new UIPropertyMetadata(RefidChanged));

    public static void RefidChanged(DependencyObject sender, DependencyPropertyChangedEventArgs args)
    {
        var el = args.NewValue as XmlElement;
        var vm = GetRuleVM(sender);
        if (vm == null)
            return;
        vm.SetDocumentFromRefid(sender, el);
    }

    private void SetDocumentFromRefid(DependencyObject sender, XmlElement element)
    {
        ... // this is where the actual logic sits
    }

по сути, у вас есть два измененных обработчика, и тот из них, который запускается последним, выполняет логику, потому что он видит, является ли другое свойство пустым

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