Связывание Caliburn.Micro действий между различными визуальными деревьями - PullRequest
1 голос
/ 05 июня 2019

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

Основная проблема заключается в том, что DropDownButton использует всплывающее окно для отображения своего DropDownContent (редактора), а всплывающее окно находится на другом VisualTree. Я не могу достичь исходного дерева, чтобы вызвать метод с помощью Action.TargetWithoutContext.

Я видел решения для такого рода проблем, но в основном вокруг ContextMenus и использования

Action.TargetWithoutContext="{Binding Path=PlacementTarget.Tag, RelativeSource={RelativeSource Self}}"

Я попытался изменить путь привязки TargetWithoutContext на родительский DropdownButton (конечно же, назвав их), попытался использовать AncestorType и другие RelativeSources, но мои знания в Caliburn.Micro или отладка подобных проблем, к сожалению, недостаточно обширны. чтобы решить эту проблему.

Вид, без каких-либо не относящихся к делу элементов управления и стиля:

        <ListView x:Name="FIS"
                  ItemsSource="{Binding}"
                  SelectedItem="{Binding Path=FISSelected, Mode=TwoWay}"
                  dd:DragDrop.IsDragSource="True">

            <ListView.View>
                <GridView>

                    <GridViewColumn Header="ColumnHeader">
                        <GridViewColumn.CellTemplate>
                            <DataTemplate>
                                <wpfTool:DropDownButton>
                                    <wpfTool:DropDownButton.Content>
                                        <TextBlock Text="{Binding}">
                                    </wpfTool:DropDownButton.Content>
                                    <wpfTool:DropDownButton.DropDownContent>
                                        <StackPanel>
                                            <Label/>
                                            <DockPanel>
                                                <Button x:Name="ClearFields" Content="Clear"
                                                        cal:Message.Attach="[Event Click] = [Action Clear]"
                                                        cal:Action.TargetWithoutContext="???"/>
                                            </DockPanel>
                                        </StackPanel>
                                    </wpfTool:DropDownButton.DropDownContent>
                                </wpfTool:DropDownButton>
                            </DataTemplate>
                        </GridViewColumn.CellTemplate>
                    </GridViewColumn>

                </GridView>
            </ListView.View>

        </ListView>

Пока я получаю System.Exception: «Не найдена цель для метода INDClear.» Ошибка при вызове метода:

System.Windows.Data Ошибка: 4: не удается найти источник для привязки со ссылкой [параметры ссылки TargetWithoutContext] . Произошло необработанное исключение типа «System.Exception» в WindowsBase.dll Для метода Clear цель не найдена.

...