当在我的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