我在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/>
...
答案 0 :(得分:0)
UserControl必须作为MainWindow的子项存在,如果我是对的,您必须将MainWindow的DataContext设置为MainWindowViewModel。
所以,你可以做的是在MainWindowViewModel中声明ICommand并使用RelativeSource 绑定到按钮的Command来搜索窗口的DataContext:
<ToggleButton Command="{Binding DataContext.CommandName,
RelativeSource={RelativeSource Mode=FindAncestor,
AncestorType=Window}}"/>