我不明白如何创建一个命令来创建一个可点击的MVVM矩形。这是我的代码:
<Rectangle x:Name="Color01" Fill="#FFF4F4F5" HorizontalAlignment="Left" Height="100" Margin="10,29,0,0" Stroke="Black" VerticalAlignment="Top" Width="100" MouseDown="Color_MouseDown" />
<Rectangle x:Name="Color02" Fill="#FFF4F4F5" HorizontalAlignment="Left" Height="100" Margin="115,29,0,0" Stroke="Black" VerticalAlignment="Top" Width="100"/>
<Rectangle x:Name="Color03" Fill="#FFF4F4F5" HorizontalAlignment="Left" Height="100" Margin="220,29,0,0" Stroke="Black" VerticalAlignment="Top" Width="100"/>
<Rectangle x:Name="Color04" Fill="#FFF4F4F5" HorizontalAlignment="Left" Height="100" Margin="325,29,0,0" Stroke="Black" VerticalAlignment="Top" Width="100"/>
在我的第一个矩形中,您可以看到我创建了一个代码后台事件。首先,我不知道如何从代码后台访问我的ViewModel。其次,这实际上不是MVVM。
public partial class MainWindow : Window
{
/// <summary>
/// Initializes a new instance of the MainWindow class.
/// </summary>
public MainWindow()
{
InitializeComponent();
Closing += (s, e) => ViewModelLocator.Cleanup();
}
private void Color_MouseDown(object sender, System.Windows.Input.MouseButtonEventArgs e)
{
// So what ???
}
}
当有人点击我的矩形时,我只需要能够更改存储在viewModel中的列表中的一个简单布尔值。为什么使用MVVM会这么复杂?
var rect = sender as Rectangle
然后你可以对它做任何想做的事情,尽管这是非常糟糕的设计,你应该尽一切可能使用数据绑定并将颜色绑定到字段,而不是这样做。学习和利用给定的抽象,而不是与它们斗争。 - Benjamin Gruenbaum