我正在修改我的WPF应用程序,以符合MVVM的要求。我已经接近完成了,但还有一些问题需要解决。
我有一个GUI元素(目前是一个按钮,但也可以是标签),当鼠标进入时,它会触发MouseEnter事件,并在代码后台创建一个弹出窗口。该弹出窗口由一个简单的StackPanel布局和多个按钮组成。每个按钮的Click事件目前都分配给相同的事件处理程序,只是我更改Tag属性来进行简单(低劣)的命令参数。我正在考虑在MVVM中正确实现这个功能,因为我目前的做法非常丑陋。
为了解决这个问题,我认为我应该朝着以下方向前进,但会感激您提供的任何额外意见。 :)
在XAML中创建弹出窗口。由于我的弹出窗口内容是静态的,所以我应该能够完全在XAML中创建弹出窗口。此外,每个按钮都将绑定到相同的ICommand派生类。例如:
<Popup x:Key="MyPopup" StaysOpen="False" Placement="Right"> <Border Background="White" BorderBrush="Black" Padding="5" BorderThickness="2" CornerRadius="5"> <StackPanel Orientation="Vertical"> <Button Command="{Binding MyCommand}" CommandParameter="5">5</Button> <Button Command="{Binding MyCommand}" CommandParameter="10">10</Button> <Button Command="{Binding MyCommand}" CommandParameter="15">15</Button> <Button Command="{Binding MyCommand}" CommandParameter="20">20</Button> </StackPanel> </Border> </Popup>
通过触发器使弹出窗口弹出,例如:
<Button.Triggers> <Trigger Property="Button.IsMouseOver" Value="True"> <Setter TargetName="MyPopup" Property="IsOpen" Value="True" /> </Trigger> </Button.Triggers>
-
我认为#1没问题,但#2让我挣扎了。这是正确的解决方法吗?如果是,获取弹出窗口的IsOpen属性应该使用什么XAML语法来设置为True?我找不到相关示例。
如果我的想法完全错误,我希望听听其他选项。谢谢!