WPF MVVM使用Datatrigger按下按钮并执行命令
我是WPF和MVVM的新手,只要我的ViewModel将属性设置为true,我就需要在视图中执行命令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
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
?两个视图似乎都依赖于相同的数据上下文。