2014-11-08 25 views
0

当在我的View中点击Button时,我从ViewModel调用RelayCommand。 但是,我也想在此按钮上使用Click制作Stackpanel Visible。命令并点击相同的控件

我试着绑定一个Relaycomman并为按钮做一个Click方法,但它没有起作用。 这似乎是一个非常丑陋的做法,但如果它的工作,它会保持我的观点和viewmodel分开。

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

回答

0

我的RelayCommand在将Click方法绑定到同一个控件后确实触发了。 它似乎就像它的工作原理然后..

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

+0

我更喜欢通过视图模型中的特定属性(如“ShowLoginButton”)来控制特定视图控件的可见性。然后,所有视图必须使用BooleanToVisibilityConverter绑定到此属性。然后,通过viewmodel实现什么时候显示的完整应用程序逻辑。 – 2014-11-08 17:32:57

0

如果你只是操纵接口,我会认为这是View而不是ViewModel(有例外)的作用。

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

例子:

<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> 
0

你应该在bool属性只是添加到您的视图模型,(例如,IsMyPanelVisible)。 StackPanelVisibility已绑定到此属性,并且在您的命令Execute方法中,将属性的值设置为您需要的值。

在我的意见中,这是最简单和最干净的方法。

相关问题