我正在使用WPFToolkit的DropDownButton显示一个小的编辑器,其中包含一个按钮,该按钮用于通过VM中的一种简单方法清除编辑器的字段。该方法只需要调用即可,无需传递任何参数。
主要问题是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参考参数] 的绑定源。 WindowsBase.dll中发生了'System.Exception'类型的未处理异常 找不到方法“清除”的目标。