【问题标题】:shifting code of code behind to viewmodel in wpf将代码后面的代码转移到 wpf 中的视图模型
【发布时间】:2016-07-28 06:48:19
【问题描述】:

这是我的代码隐藏:

        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);
            }
        }

“画布”是我在 XAML 中的画布控件的名称。当前代码为我提供了获取画布内图像位置的能力。这是在代码隐藏中实现的。问题是,我们如何以 MVVM 方式获取图像的位置(使用命令启动进程)?

【问题讨论】:

    标签: wpf mvvm icommand


    【解决方案1】:

    我们如何以 MVVM 方式获取图像的位置(使用命令启动进程)?

    不需要命令,只需将每个画布的每个所需属性绑定到 VM。然后在需要时提取获取图像所需的目标画布属性。

    【讨论】:

      【解决方案2】:

      一个好的解决方案是使用 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' 是我在 XAML 中的 Canvas 控件的名称”。这是名字。
      • 很公平,然后将您的示例画布命名为相同。正确的?只是要清楚。 :-)
      • 是的,你是对的 :) 我已经修改了答案。谢谢
      猜你喜欢
      • 2022-01-20
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-03-27
      • 2014-03-14
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多