【问题标题】:Wpf without event handlers没有事件处理程序的 Wpf
【发布时间】:2012-04-15 11:37:23
【问题描述】:

编辑:我误读了分配....没有事件处理程序,因为他不希望我们继续工作,我们只是将一组数据绑定到要显示的控件。

wpf 中家庭作业的小问题。我们正在为每部作品建立一个程序,我们现在正在绑定。用户在文本框中输入数据,然后它将两组数据显示到两个数据网格中。现在,显示的内容是硬编码的,而不是从数据库中提取的。我可以让它显示数据,我可以让它根据文本框输入显示正确的数据,但我们不允许使用事件处理程序。那么如何在没有事件处理程序的情况下读取按钮单击呢?

我可以绑定文本框和窗口的标题,因此它会随着文本框中的文本更改而更改,但我无法获取文本框中的内容。可能我忽略了书中的某些内容,但我看不出至少没有按钮的事件处理程序是怎么可能的。

【问题讨论】:

  • 给按钮添加命令怎么样?
  • 如果文本框已绑定,那么只需从属性中获取值。按钮应该做什么?

标签: wpf events handler


【解决方案1】:

另一种方法是将按钮绑定到命令,这才是真正替换事件的方法

 <Button Command="{Binding ViewModel.YourCommand}"

 <Button Command="{Binding ViewModel.Cmd}" CommandParameter="{Binding ViewModel.CmdParam}"/>

在 ViewModel 中,您执行所有逻辑。虽然您可以将命令放在 YourView.xaml.cs 中,但这取决于您的 MVVM 设计(意味着如果您觉得该功能不属于 ViewModel)

【讨论】:

  • 他没有特别说我们不能这样做,但我们不能使用事件处理程序的原因是他不希望我们专注于数据绑定,而我们没有'尚未涵盖事件处理程序、命令或触发器。不过,这似乎更像是试图阻止我们完成项目,然后在我们上交一周的进度时删除我们不需要的东西。下周我会玩这个。
  • 命令旨在替换此类事件,以实现 ViewModel 和 View 之间的松散耦合。
【解决方案2】:

您可以将数据网格多重绑定到两件事:您的源数据和文本框。在转换器中,您可以分析文本框的内容并选择要显示的数据的正确部分。

【讨论】:

  • 但这会使所需的按钮无用,不是吗?我必须单击按钮,但我不能使用事件处理程序。
  • 是的。但是按钮是作业的一部分吗?也许你可以不用它?
  • 是的,UI 中需要该按钮。我们不能使用事件处理程序,因为它们还没有被覆盖,尽管我们在先决条件 c# 类中学习了它们。命令也没有被覆盖。我看不出有什么办法。
  • 您可以绑定到按钮的 IsPressed :-) 因此,一旦状态发生变化,您就会调用转换器。很明显,这是一种黑客行为。
  • 弗拉德,我认为你的回答很好,我不认为这是一个黑客,只是另一种获得你需要的方式,实际上不是以丑陋的方式,你必须在视觉树上旅行等等等等。我认为这是一个很好的方法!
【解决方案3】:

如果您不允许使用事件并且需要在界面中使用按钮,那么命令绝对是要走的路。

实际上,自 WPF 发布以来,命令是交互而非事件的首选解决方案。由于我主要使用 MVVM 进行开发,所以我不记得我上一次挂钩按钮事件是什么时候了。

此外,将按钮链接到交互的所有其他方式都是一种肮脏的技巧。

也许这对你的课程有点进步,但仍然值得一读:http://msdn.microsoft.com/en-gb/magazine/cc785480.aspx

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-03-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-02-02
    相关资源
    最近更新 更多