wpf Binding nie działa przez realativesource.

0

Hej ,
Mam taki nie typowy problem. Posiadam w contextmenu -> menuitem binding (pod IsEnabled) flage, która jest pobierana z innego vm niż przypisany datacontext z contextmenu. Oczywiście używam ancestortype który ma wyszukać w datacontexcie tą flagę pod TreeView. Niestety po wywołaniu contextmenu nie chce mi wejść w tą flagę chyba, że w trakcie działania programu usunę i wpisze byle co w IsEnable -> akceptuje kod -> powrócę do tej samej wartości bindingu -> akceptuje kod i nagle z tym samym kodem odpala się breakpoint we fladze. Ktoś wie dlaczego to tak się zachowuje? Jakoś się odświeża contextmenu po wprowadzeniu tej zmiany?

XAML:

<MenuItem Command="{Binding ShowDependenciesCommand}"
                                                      Header="{x:Static r:Resources.ShowDependencies}" 
                                                      IsEnabled="{Binding RelativeSource={RelativeSource FindAncestor, AncestorType={x:Type TreeView}}, 
                                                      Path=DataContext.IsSelectSingleItem}"/>

oraz flaga w vm:

public bool IsSelectSingleItem
        {
            get
            {
                return myList.Count == 1 ?
                                  true : false;
            }
        }

0

Bo jak zmieniasz plik XAML, to on znowu sięga po te właściwości i je odczytuje ponownie.
Moim zdaniem, po wywołaniu komendy trzeba odświeżyć właściwość IsSelectSingleItem.
A skoro używasz RelativeSource to musisz jakoś sięgnąć z miejsca komendy do tej właściwości w tym innym viewmodelu.

1

Jak powyżej - zmieniając kod odświeżasz binding. Bindingi się same nie odświeżają dopóki nie zaimplementujesz OnPropertyChanged i go nie wywołasz. Obecnie widok się nie odświeży przy zmianie myList. Poza tym - zbędne ? true : false.

0

to musiałeś źle zaimplementować interfejs INotifyPropertyChanged albo dobrze go zaimplementowałeś ale nie wywołałeś metody po zmianie wartości. A co mówi output? Tam zawsze wyskakują błędy w bindingu

0

AncestorType oraz ElementName nie działają prawidłowo w contexmenu. Przepraszam za zwłokę, ale dopiero teraz mogłem do tego wrócić.

1 użytkowników online, w tym zalogowanych: 0, gości: 1