2009-12-04 50 views
1

在WPF中,我有一个带UserControl的ListBox作为它的ItemTemplate - 所有数据都显示ok。我现在在该用户控件中添加了一个用于输入的文本框。在MVVM设计中,当用户在列表框中的项目模板中编辑用户控件中的文本框的内容时,我想在主窗口中执行一些操作(重新计算值)。问题是 - 如何将该事件传播到模型?用户控件绑定到一个业务对象,我可以看到在那里改变了值(INotifyPropertyChanged在BO中实现),但是,如何将该事件提交给模型(而不是代码隐藏)呢? 任何例子或指针最受欢迎!来自UserControl的WPF ListBox中ItemTemplate的事件

回答

0

我假设,因为这是一个MVVM应用程序,您试图传播完成文本更改事件到视图模型。

您可以通过使用Attached Property或行为在视图中添加代码而无需添加代码。实际上,表达式库上有一个行为,当您点击Enter in a TextBox时调用一个命令。只要TextBox改变它的值(这在目标上非常相似),这很容易被重新编制,以在ViewModel上触发自定义的ICommand。

+0

感谢您指点我到这些迄今尚未开发的地区。假设我要在用户控件中(在项目模板中的列表框中)实现一个带有ICommand的行为,我不太明白在列表框位于顶层的情况下,这将如何操作。或者,也许我的列表框/ itemtemplate/usercontrol /文本框层次结构有缺陷?感谢您的链接 - 一些更多的点击将是有益的。在foll链接的例子也很有用,行为似乎是正确的想法(参见http://codeblitz.wordpress.com/2009/07/01/wpf-editable-behavior-for-labels/) – jas 2009-12-05 12:41:11

+0

这可以让您可能会将您的文本更改为ViewModel中的命令,从而允许您设置属性或引发可以传播链条的事件。另外,在重新阅读之后,我意识到您可能想要使用路由事件将事件从您的UserControl传播到更高级别的接口,从而可以以任何他们想要的方式处理它们。 (他们让你在视觉树中传播任意数量的“关卡”......) – 2009-12-05 20:19:53

+0

事实证明,我通过简单的依赖属性实现了我想要的。在路线上,我有两个问题:DP不是两种方式,我没有绑定语法正确(什么工作:“{Binding Path = DataContext.MyValue,RelativeSource = {RelativeSource FindAncestor,AncestorType = {x:Type ListBox }},UpdateSourceTrigger = PropertyChanged}“)。感谢您的建议。 – jas 2009-12-06 20:59:48

相关问题