从不在DataContext中的控件调用方法
本文关键字:控件 调用 方法 DataContext | 更新日期: 2023-09-27 18:07:44
我在UserControl中有一个按钮,我想调用另一个类中的方法(这恰好是我的主窗口的视图模型)。
<ToggleButton cal:Message.Attach="[Event Click] = [Action ToggleWatch]">
用户控件的DataContext绑定到一个DataTemplate。这使得一切都很漂亮,除非我遇到这样的情况,在DataTemplate类中实现ToggleWatch方法没有多大意义,因为DataTemplate应该只包含数据。
是最好的方法来解决这是通过设置这个控件的DataContext到MainWindowViewModel?当我想从DataTemplate绑定一个值到同一个按钮时,这个解决方案失败了,因为DataContext修改将使它在MainWindowViewModel中寻找值。
如果我把问题弄得太复杂了,我会总结一下。我有一个UserControl,其DataContext是一个单独的DataTemplate。我想从按钮中调用一个方法,当它被单击时,但我想从DataTemplate分离的方法。我希望这个方法在一个完全不同的类中。解决这个问题的最好方法是什么?下面是我如何设置DataTemplate:<WrapPanel>
<ItemsControl ItemsSource="{Binding Devices}">
<ItemsControl.ItemTemplate>
<DataTemplate>
<local:DeviceCleanerBox/>
...
UserControl必须作为主窗口的子窗口存在,如果我是对的,你必须设置主窗口的DataContext为MainWindowViewModel。
所以,你可以做的是在MainWindowViewModel中声明iccommand,并使用RelativeSource绑定到按钮的命令来搜索窗口的DataContext:
<ToggleButton Command="{Binding DataContext.CommandName,
RelativeSource={RelativeSource Mode=FindAncestor,
AncestorType=Window}}"/>