AttachedProperty PropertyChangedCallback никогда не вызывает мой LayoutAnchorable, но работает с DockingManager. АвалонДок

Я пытаюсь использовать AttachedProperty в своем AvalonDock, я хочу, чтобы он был частью LayoutAnchorable, но PropertyChangedCallback никогда не вызывается. я привязал AttachedPropert, и я получаю контроль над ViewModel, то есть: когда связанное свойство изменяется, оно запускает мое свойство ViewModel.

Мой AttachedProperty

public static readonly DependencyProperty IsCanVisibleProperty =
        DependencyProperty.RegisterAttached("IsCanVisible", typeof(bool), typeof(AvalonDockBehaviour), new FrameworkPropertyMetadata(new PropertyChangedCallback(IsCanVisiblePropertyChanged)));

    private static void IsCanVisiblePropertyChanged(DependencyObject d, DependencyPropertyChangedEventArgs e)
    {
        LayoutAnchorable control = d as LayoutAnchorable;
        if (control != null)
        {
            control.IsVisible = (bool)e.NewValue;
        }
    }
    public static void SetIsCanVisible(DependencyObject element, bool value)
    {   
        element.SetValue(IsCanVisibleProperty, value);
    }

    public static bool GetIsCanVisible(DependencyObject element)
    {
        return (bool)element.GetValue(IsCanVisibleProperty);
    }

XAML

  <xcad:DockingManager>               
     <xcad:LayoutRoot >                 
        <xcad:LayoutPanel Orientation="Horizontal" >       
            <xcad:LayoutAnchorablePane >                                
                  <xcad:LayoutAnchorable Title="Folder" behv:AvalonDockBehaviour.IsCanVisible="{Binding IsHideExplorer, Mode=TwoWay,UpdateSourceTrigger=PropertyChanged}">
                       <Views:ExplorerView DataContext="{Binding ExplorerViewModel}"/>
                  </xcad:LayoutAnchorable>
            </xcad:LayoutAnchorablePane>
        </xcad:LayoutPanel>
      </xcad:LayoutRoot>
  </xcad:DockingManager>

Свойство ViewModel

    private bool _IsHideExplorer;
    public bool IsHideExplorer 
    {
        get { return _IsHideExplorer; }
        set { _IsHideExplorer = value; NotifyPropertyChanged(); }
    }

Я попытался прикрепить свойство к DockingManager, PropertyChangedCallback работает. Любая помощь, ребята.


person Abin    schedule 02.09.2015    source источник


Ответы (1)


Вы уже проверили DataContext вашего LayoutAnchorable? Возможно, DataContext ему не передается. В этом случае привязка не будет работать, и ваше DependencyProperty не будет обновлено.

person E812    schedule 02.09.2015