2014-11-08 56 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方法中,將屬性的值設置爲您需要的值。

在我的意見中,這是最簡單和最乾淨的方法。

相關問題