如何从后面的代码访问ViewModel [英] How can I access my ViewModel from code behind
问题描述
我不明白如何创建创建MVVM可点击矩形的命令.这是我的代码:
I don't understand how I can create a command to create a MVVM clickable rectangle. Here is my code:
<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.
On my first rectangle you can see I created a code behind event. First I don't know how to access my ViewModel from the code behind. Two it's not really 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如此复杂?
I just need to be able to change a simple boolean value stored in a list stored in my viewModel when someone click on my rectangle. Why it is so complicate to do with MVVM?
推荐答案
这不太困难.首先,在Window XAML中创建ViewModel的实例:
This isn't too difficult. First, create an instance of your ViewModel inside your Window XAML:
查看XAML:
<Window x:Class="BuildAssistantUI.BuildAssistantWindow"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:VM="clr-namespace:MySolutiom.ViewModels">
<Window.DataContext>
<VM:MainViewModel />
</Window.DataContext>
</Window>
After that, you can System.Windows.Interactivity.InvokeCommandAction
to translate your event to a command:
查看XAML:
<Grid>
<Rectangle x:Name="Color01" Fill="#FFF4F4F5" HorizontalAlignment="Left" Height="100" Margin="10,29,0,0" Stroke="Black" VerticalAlignment="Top" Width="100" MouseDown="Color_MouseDown"> <interactivity:Interaction.Triggers>
<interactivity:EventTrigger EventName="MouseDown">
<interactivity:InvokeCommandAction Command="{Binding MyCommand}"/>
</interactivity:EventTrigger>
</interactivity:Interaction.Triggers>
</Rectangle>
</Grid>
现在,在您的ViewModel中,设置一个 ICommand
和 DelegateCommand
绑定到该事件的实现:
Now, in your ViewModel, set up an ICommand
and the DelegateCommand
implementation to bind to that event:
ViewModel:
public class ViewModel
{
public ICommand MyCommand { get; set; }
public ViewModel()
{
MyCommand = new DelegateCommand(OnRectangleClicked);
}
public void OnRectangleClicked()
{
// Change boolean here
}
}
这篇关于如何从后面的代码访问ViewModel的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!