WPF MVVM使用Datatrigger按下按钮并执行命令

WPF MVVM使用Datatrigger按下按钮并执行命令,wpf,mvvm,view,command,datatrigger,Wpf,Mvvm,View,Command,Datatrigger,我是WPF和MVVM的新手,只要我的ViewModel将属性设置为true,我就需要在视图中执行命令commandToExec。现在,我有一个Stackpanel,当设置了propertyToSet时,它会变为可见,在Stackpanel内有一个按钮,绑定到命令commandToExec,在该按钮上有一个Datatrigger,如果设置了propertyToSet,它会被按下。大致如下所示: <StackPanel Visibility="{Binding prop

我是WPF和MVVM的新手,只要我的ViewModel将属性设置为true,我就需要在视图中执行命令
commandToExec
。现在,我有一个Stackpanel,当设置了
propertyToSet
时,它会变为可见,在Stackpanel内有一个按钮,绑定到命令
commandToExec
,在该按钮上有一个Datatrigger,如果设置了
propertyToSet
,它会被按下。大致如下所示:

       <StackPanel Visibility="{Binding propertyToSet, Converter={StaticResource BooleanToVisibilityConverter}}">
            <Button
                Command="{Binding commandToExec}">
                <Style TargetType="Button">
                    <Style.Triggers>
                        <DataTrigger Binding="{Binding commandToExec, Converter={StaticResource BooleanToVisibilityConverter}}">
                            <Setter Property="Button.IsPressed" Value="True" />   //Trying to set button isPressed to true to trigger command
                        </DataTrigger>
                    </Style.Triggers>
                </Style>
            </Button>
        </StackPanel>
        <StackPanel Visibility="{Binding propertyToSet, Converter={StaticResource BooleanToVisibilityConverter}}">
              <SomethingThatAutomaticallyDoesCommand Command="{Binding commandToExec}"/>
        <StackPanel/>

//尝试将按钮按为true以触发命令
这不起作用,而且似乎不直观和笨拙,所以我相信有更好的方法来做到这一点。我对XAML了解不多,所以我只是大致了解一下这段代码,但我想做一些类似的事情:

       <StackPanel Visibility="{Binding propertyToSet, Converter={StaticResource BooleanToVisibilityConverter}}">
            <Button
                Command="{Binding commandToExec}">
                <Style TargetType="Button">
                    <Style.Triggers>
                        <DataTrigger Binding="{Binding commandToExec, Converter={StaticResource BooleanToVisibilityConverter}}">
                            <Setter Property="Button.IsPressed" Value="True" />   //Trying to set button isPressed to true to trigger command
                        </DataTrigger>
                    </Style.Triggers>
                </Style>
            </Button>
        </StackPanel>
        <StackPanel Visibility="{Binding propertyToSet, Converter={StaticResource BooleanToVisibilityConverter}}">
              <SomethingThatAutomaticallyDoesCommand Command="{Binding commandToExec}"/>
        <StackPanel/>

因此,只要StackPanel通过
propertyToSet
可见,任意对象SomethingAtAutomaticallyDoesCommand就会执行其任务并运行该命令。 我看到的另一个黑客想法是,在StackPanel上设置一个标记,根据propertyToSet对其进行更新,并以某种方式将我的命令绑定到TargetUpdated,如[here][1]所示

无论如何,我希望这是有道理的。非常感谢!
[1] :

为什么这么复杂?从您的绑定中,我可以看到
propertyToSet
commandToExec
位于同一视图模型中。只需从
propertyToSet
属性的set方法调用execute委托即可。那么,当调用propertyToSet时,只需在set方法中执行commandToExec?这是有道理的,但不幸的是,我刚刚意识到commandToExec来自父视图,所以当我在视图中绑定它时,我必须使用
{Binding DataContext.commandToExec,RelativeSource={RelativeSource AncestorType={x:Type local:main window},Mode=OneWay}
。我想我现在无法从这个viewModel访问commandToExec。很抱歉造成混淆,这些是我发布后所做的更改。请更新您的问题以显示完整的上下文。您必须显示所有相关视图以及它们如何协同工作。
堆叠面板如何/何时加载等。否则无法提供帮助。在不知道任何细节的情况下,您的设计似乎有一些缺陷。考虑将<代码>属性TysTeT> /代码>移动到公开命令的同一视图模型中。同样,请更新您的问题。不要忘记显示所有视图的
DataContext
。为什么子视图具有不同的
DatContext
?两个视图似乎都依赖于相同的数据上下文。