Menu nie działa, gdy wystaje poza TaskPane

0

Problemów z DataContext ciąg dalszy... Część pierwsza tutaj: link
Mój xaml:

<ContextMenu>
    <MenuItem Header="TEST 1"       
            ItemsSource="{Binding Data.Thesises, Source={StaticResource proxy}}" 
            AlternationCount="{Binding Data.Thesises.Count, Source={StaticResource proxy}}"
            HeaderTemplate="{x:Null}">

        <MenuItem.Resources>
            <Style TargetType="{x:Type MenuItem}">
                <Setter Property="HeaderTemplate">
                    <Setter.Value>
                        <DataTemplate>
                            <TextBlock>
                                <TextBlock.Text>
                                    <MultiBinding StringFormat="{}{0}: {1}">
                                        <Binding Path="(ItemsControl.AlternationIndex)" RelativeSource="{RelativeSource FindAncestor, AncestorType={x:Type MenuItem}}" />
                                        <Binding Path="Data.Thesises.Count" Source="{StaticResource proxy}"/>
                                    </MultiBinding>
                                </TextBlock.Text>
                            </TextBlock>
                        </DataTemplate>
                    </Setter.Value>
                </Setter>
                <Setter Property="Command" Value="{Binding DataContext.InsertTextCommand, RelativeSource={RelativeSource FindAncestor, AncestorType={x:Type ContextMenu}}}" />
            </Style>
        </MenuItem.Resources>
    </MenuItem>
    <MenuItem
            Header="TEST 2" 
            Command="{Binding InsertTextCommand}" />
</ContextMenu>

Chciałabym, żeby elementy submenu utworzonego w MenuItem "TEST 1" wywoływały metodę InsertTextCommand. Niestety gdy klikam, to nic się nie dzieje. W okienku Output nie widzę żadnych komunikatów o problemach z binding, choć wcześniej tam były ;)

Gdy klikam na MenuItem "TEST 2" to komenda jest wywoływana.

Gdy podglądam w Live Visual Tree, to MenuItem "TEST 1" ma DataContext prawidłowy - tj. ustawiony na ViewModel. W Items tego MenuItem wyświetla się lista Thesises i elementy nie mają DataContext, tylko właściwości klasy Thesis.

datacontext.png

Nie wiem, jak to rozumieć. Thesis nie ma też Headera, a jednak to się udaje ustawić... Może problem jest w czym innym, niż błędny DataContext?

0

Zrobiłam jeszcze jeden test:

<MenuItem
        Header="TEST 3"
        Visibility="Visible">
    <MenuItem Header="TEST" Command="{Binding InsertTextCommand}" />
    <MenuItem Header="TEST" Command="{Binding InsertTextCommand}" />
    <MenuItem Header="TEST" Command="{Binding InsertTextCommand}" />
</MenuItem>

I te komendy też się nie wywołują! Live Visual Tree pokazuje na nich prawidłowe DataContexty i prawidłowo zbindowane Command... Czemu więc nic się nie dzieje, gdy klikam...?

0

O mamuniu, co tu się dzieje o.O
To trzeba obrazkowo pokazać, bo słowami tego nie ogarnę:
customtaskpane1.png
customtaskpane2.png

Zaczynam się zastanawiać, czy w ogóle powinnam używać ContextMenu...

0

Z opisu to wygląda dokładnie jak to:
https://social.msdn.microsoft[...]k-pane-wpf-problem?forum=vsto

Niestety w linku nie podano rozwiązania.

0

Ponoć to jest rozwiązanie: https://blogs.msdn.microsoft.[...]cel-ui-for-wpf-context-menus/
Teraz jeszcze tylko rozkminić, jak to zaimplementować w sytuacji, gdy mam dynamiczną kolekcję elementów, z których każdy ma ContextMenu -_-'
Może trzeba było oprzeć menu na buttonach... Nie kocham WPF, oj nie :(

0

Zaimplementowałam rozwiązanie z DispatcherFrame i niestety do bani to jest. Komendy z ContextMenu działają, ale po pierwsze całe menu zamula, a po drugie - blokuje to dalszą edycję dokumentu :O
Czy ktokolwiek ma jakieś inne pomysły? Albo może jakieś sugestie, czemu DispatcherFrame nie zadziałał tak jak powinien?

0

Jakby ktoś jeszcze był zainteresowany, to w rozwiązaniu z DispatcherFrame (https://blogs.msdn.microsoft.[...]cel-ui-for-wpf-context-menus/) trzeba usunąć ify, a oprócz tego dodać obsługę eventu Click w naszym ContextMenu, która będzie robić:

Dispatcher.ExitAllFrames();

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