所以我仍然试图找出使用MVVM的WPF的局限性。现在,我想知道是否可以绑定按钮单击以触发对另一个控件依赖项属性的更改,而无需触及后面的代码。这是我的Xaml的样本。
<xctk:WindowContainer>
<xctk:ChildWindow IsModal="True" WindowStartupLocation="Center" WindowState="Open">
<view:EditView/>
</xctk:ChildWindow>
</xctk:WindowContainer>
现在在这个编辑视图中,我有一些字段和一个提交和取消按钮,它与其父视图共享相同的视图模型。
<StackPanel Orientation="Horizontal" HorizontalAlignment="Center">
<Button Content="Submit"/>
<Button Content="Cancel"/>
</StackPanel>
现在通常我只是在ViewModel中创建一个命令来执行我想要的行为,但是当我点击时我想将ChildWindow的WindowState属性设置为Closed时我认为不会很好取消按钮?我不知道这是否可以轻松完成,但我想我会问,因为它似乎应该是可能的,但我对WPF的了解还不存在。我很感激任何意见。
答案 0 :(得分:1)
您可以尝试将EventTrigger
与Storyboard
:
<xctk:WindowContainer>
<xctk:ChildWindow x:Name="childWindow">
<view:EditView/>
</xctk:ChildWindow>
</xctk:WindowContainer>
...
<StackPanel Orientation="Horizontal" HorizontalAlignment="Center">
<Button Content="Submit"/>
<Button Content="Cancel">
<Button.Triggers>
<EventTrigger RoutedEvent="Button.Click">
<BeginStoryboard>
<Storyboard>
<ObjectAnimationUsingKeyFrames Duration="0" Storyboard.TargetName="childWindow" Storyboard.TargetProperty="WindowState">
<DiscreteObjectKeyFrame KeyTime="0" Value="{x:Static xctk:WindowState.Closed}" />
</ObjectAnimationUsingKeyFrames>
</Storyboard>
</BeginStoryboard>
</EventTrigger>
</Button.Triggers>
</Button>
</StackPanel>
(参见http://dotnet.dzone.com/articles/event-based-property-changes )