点击Button
中的View
时,我正在呼叫RelayCommand
中的ViewModel
。
但是,我还希望使用此按钮上的Click
使Stackpanel可见。
我尝试绑定一个Relaycomman并为按钮创建一个Click方法,但它没有用。 它似乎也是一种非常丑陋的方式,但如果它有效,它将保持我的观点和视图模型分开。
如何在调用RelayCommand之前与我的View进行交互,因为我希望尽可能保持View和ViewModel的分离。
答案 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
方法中将属性的值设置为您需要的值。
在我看来,这是最简单,最干净的方法。