在wpf中将代码的代码转移到viewmodel
以下是我的代码:在wpf中将代码的代码转移到viewmodel,wpf,mvvm,icommand,Wpf,Mvvm,Icommand,以下是我的代码: private void Button_Click(object sender, RoutedEventArgs e) { foreach (FrameworkElement fe in canvas.Children) { double top = (double)fe.GetValue(Canvas.TopProperty); do
private void Button_Click(object sender, RoutedEventArgs e)
{
foreach (FrameworkElement fe in canvas.Children)
{
double top = (double)fe.GetValue(Canvas.TopProperty);
double left = (double)fe.GetValue(Canvas.LeftProperty);
}
}
“canvas”是我的canvas控件在XAML中的名称。当前的代码使我能够获取画布中图像的位置。这是在代码隐藏中实现的。问题是,我们如何以MVVM方式获取图像的位置(使用命令启动该过程)
我们如何以MVVM方式获取图像的位置(使用命令启动该过程)
不需要命令,只需将每个画布的每个所需属性绑定到VM即可。然后在需要时提取获取图像所需的目标画布属性
我们如何以MVVM方式获取图像的位置(使用命令启动该过程)
不需要命令,只需将每个画布的每个所需属性绑定到VM即可。然后在需要时提取获取图像所需的目标画布属性。一个好的解决方案是使用XAML行为:
<Canvas x:Name="Canvas">
<i:Interaction.Triggers>
<i:EventTrigger EventName="Click">
<i:InvokeCommandAction Command="{Binding YourCommand}"
CommandParameter="{Binding ElementName=canvas}"/>
</i:EventTrigger>
</i:Interaction.Triggers>
</Canvas>
通过这种方式,您可以在
视图模型中访问画布
,并可以在命令中执行隐藏的代码。一个好的解决方案是使用XAML行为:
<Canvas x:Name="Canvas">
<i:Interaction.Triggers>
<i:EventTrigger EventName="Click">
<i:InvokeCommandAction Command="{Binding YourCommand}"
CommandParameter="{Binding ElementName=canvas}"/>
</i:EventTrigger>
</i:Interaction.Triggers>
</Canvas>
通过这种方式,您可以在ViewModel
中访问Canvas
,并可以在命令中执行隐藏的代码。您将ElementName
设置为“Canvas”,但Canvas
没有名称……这是打字错误吗?在问题中,它说:“canvas”是我的canvas控件在XAML中的名称。这是名称。很公平,然后将示例canvas命名为相同的名称。对吗?只是为了澄清一下。:-)是的,你是对的:)我修改了答案。谢谢你将ElementName
设置为“canvas”,但是canvas
没有名称……这是打字错误吗?在问题中它说:”“canvas”是我的canvas控件在XAML中的名称。这是一个名称。很公平,然后将示例canvas命名为相同的名称。对吗?只是为了澄清一下。:-)是的,你是对的:)我修改了答案。谢谢