从不在DataContext中的控件调用方法



我在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}}"/>

最新更新