命令并单击相同的控件

时间:2014-11-08 14:57:49

标签: c# wpf xaml mvvm

点击Button中的View时,我正在呼叫RelayCommand中的ViewModel。 但是,我还希望使用此按钮上的Click使Stackpanel可见。

我尝试绑定一个Relaycomman并为按钮创建一个Click方法,但它没有用。 它似乎也是一种非常丑陋的方式,但如果它有效,它将保持我的观点和视图模型分开。

如何在调用RelayCommand之前与我的View进行交互,因为我希望尽可能保持View和ViewModel的分离。

3 个答案:

答案 0 :(得分:0)

在将Click方法绑定到同一控件后,我的RelayCommand确实触发了。 它看起来像是完美无缺的。

如果有更好的方式与视图控件进行交互,我仍然愿意接受新建议。

答案 1 :(得分:0)

如果你只是操纵界面,我认为这是View而不是ViewModel的角色(有例外)。

您可以使用按钮上的EventTrigger设置Visibility控件的StackPanel属性。

示例:

<Window x:Class="WpfApplication1.MainWindow"
        xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
        xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
        Title="MainWindow" Height="350" Width="525">
    <Grid>
        <Grid.RowDefinitions>
            <RowDefinition Height="30"/>
            <RowDefinition Height="*" />
        </Grid.RowDefinitions>
        <Button Content="Button" Margin="5" VerticalAlignment="Center">
            <Button.Triggers>
                <EventTrigger RoutedEvent="Button.Click">
                    <BeginStoryboard>
                        <Storyboard>
                            <ObjectAnimationUsingKeyFrames BeginTime="00:00:00" Storyboard.TargetName="MyStackPanel" Storyboard.TargetProperty="(UIElement.Visibility)">
                                <DiscreteObjectKeyFrame KeyTime="00:00:00" Value="{x:Static Visibility.Visible}"/>
                            </ObjectAnimationUsingKeyFrames>
                        </Storyboard>
                    </BeginStoryboard>
                </EventTrigger>
            </Button.Triggers>
        </Button>
        <StackPanel Grid.Row="1" x:Name="MyStackPanel" Margin="5" Height="auto" Width="auto" Background="HotPink" Visibility="Hidden" />
    </Grid>
</Window>

答案 2 :(得分:0)

您只需向ViewModel添加bool属性即可(例如IsMyPanelVisible)。 Visibility的{​​{1}}绑定到此属性,并在命令StackPanel方法中将属性的值设置为您需要的值。

在我看来,这是最简单,最干净的方法。