當在我的View
中點擊Button
時,我從ViewModel
調用RelayCommand
。 但是,我也想在此按鈕上使用Click
製作Stackpanel Visible。命令並點擊相同的控件
我試着綁定一個Relaycomman併爲按鈕做一個Click方法,但它沒有起作用。 這似乎是一個非常醜陋的做法,但如果它的工作,它會保持我的觀點和viewmodel分開。
如何在調用RelayCommand之前與我的視圖進行交互,因爲我希望儘可能將View和ViewModel分開。
當在我的View
中點擊Button
時,我從ViewModel
調用RelayCommand
。 但是,我也想在此按鈕上使用Click
製作Stackpanel Visible。命令並點擊相同的控件
我試着綁定一個Relaycomman併爲按鈕做一個Click方法,但它沒有起作用。 這似乎是一個非常醜陋的做法,但如果它的工作,它會保持我的觀點和viewmodel分開。
如何在調用RelayCommand之前與我的視圖進行交互,因爲我希望儘可能將View和ViewModel分開。
我的RelayCommand在將Click方法綁定到同一個控件後確實觸發了。 它似乎就像它的工作原理然後..
如果有更好的方式與視圖控件進行交互,我仍然接受新的建議。
如果你只是操縱接口,我會認爲這是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>
你應該在bool
屬性只是添加到您的視圖模型,(例如,IsMyPanelVisible
)。 StackPanel
的Visibility
已綁定到此屬性,並且在您的命令Execute
方法中,將屬性的值設置爲您需要的值。
在我的意見中,這是最簡單和最乾淨的方法。
我更喜歡通過視圖模型中的特定屬性(如「ShowLoginButton」)來控制特定視圖控件的可見性。然後,所有視圖必須使用BooleanToVisibilityConverter綁定到此屬性。然後,通過viewmodel實現什麼時候顯示的完整應用程序邏輯。 – 2014-11-08 17:32:57