2012-04-22 82 views
0

我有一个WPF页面有一个DataContext分配给它。在这个页面上有几个文本框。每个文本框都绑定到来自DataContext的父对象的属性。例如,DataContext上有一个Location对象。该位置对象具有类似于“名称”和“地址1”等特性如何捕获使用MVVM修改DataContext对象的属性?

文本框控件绑定像这样:

<Binding Path="Location.Name" Mode="TwoWay"> 

我曾经所有的数据是“提交”按钮,只有变为启用有效。这依赖于在设置属性之后评估这个过程。如果这不是位置的子属性,我可以很容易地做到这一点是这样的:

public Location Location 
{ 
    get { return _location; } 
    set 
    { 
     _location = value; 
     OnPropertyChanged("Location"); 
     OnPropertyChanged("IsCommitEnabled"); 
    } 
} 

但由于定位对象实际上从未设置,而是定位对象的“名称”属性,该事件永远不会触发。当我的位置对象的属性被修改/设置时,有没有办法引发我的“OnPropertyChanged(”IsCommitEnabled“)”方法?

回答

1

我猜你的按钮有一个Click处理程序,它的Enabled属性绑定到IsCommitEnabled。除了您负责启用状态的更新外,这是很好的 - 这是您表达的问题。
另一种方法是用一个绑定命令替换Click处理程序和Enabled绑定。 您可以将Command作为RoutedCommand来实现,并将CanExecuteRoutedEventArgs.CanExecute设置为IsCommitEnable,或者您可以提供ICommand的实现,其中ICommand.CanExecute将检查IsCommitEnabled。
在这两种情况下,在轮询CanExecute方法后,框架都会查找 - 因此当属性更改时,您不必执行proptry更新。

的RoutedCommand例如:

<Window.CommandBindings> 
    <CommandBinding 
     Command="{x:Static p:Window1.StartButtonCommand}" 
     Executed="buttonStart_Executed" 
     CanExecute="CommandBinding_StartButtonEnabled" /> 
</Window.CommandBindings> 

​​
+0

感谢您的建议。对此,我真的非常感激! – jermny 2012-04-22 17:09:03