C# 如何捕获对DataContext的修改';s对象';使用MVVM的属性?

C# 如何捕获对DataContext的修改';s对象';使用MVVM的属性?,c#,wpf,binding,mvvm,.net-4.0,C#,Wpf,Binding,Mvvm,.net 4.0,我有一个WPF页面,其中分配了DataContext。在这个页面上有几个文本框。每个文本框都绑定到DataContext中父对象的属性。例如,DataContext上有一个Location对象。Location对象具有“Name”和“Address1”等属性 文本框控件的绑定方式如下: <Binding Path="Location.Name" Mode="TwoWay"> public Location Location { get { return _location;

我有一个WPF页面,其中分配了DataContext。在这个页面上有几个文本框。每个文本框都绑定到DataContext中父对象的属性。例如,DataContext上有一个Location对象。Location对象具有“Name”和“Address1”等属性

文本框控件的绑定方式如下:

<Binding Path="Location.Name" Mode="TwoWay">
public Location Location
{
    get { return _location; }
    set
    {
        _location = value;
        OnPropertyChanged("Location");
        OnPropertyChanged("IsCommitEnabled");
    }
}

但由于从未实际设置Location对象,而是设置Location对象的“Name”属性,因此该事件从未触发。当我的位置对象的属性被修改/设置时,有没有办法触发我的“OnPropertyChanged(“IsCommitEnabled”)”方法?

我猜你的按钮有一个点击处理程序,它的Enabled属性被绑定到IsCommitEnabled。这很好,只是您负责更新启用状态-这是您表示的问题。
另一种方法是将单击处理程序和启用的绑定替换为命令的绑定。 您可以将该命令实现为RoutedCommand并将CanExecuteRoutedEventArgs.CanExecute设置为IsCommitteed,也可以提供ICommand的实现,其中ICommand.CanExecute将检查IsCommitteed。
在这两种情况下,框架负责轮询CanExecute方法,因此当属性更改时,您不必执行proptry更新

RoutedCommand示例:

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

谢谢你的建议。我真的很感激!
public static RoutedCommand StartButtonCommand = new RoutedCommand();
private void CommandBinding_StartButtonEnabled(object sender, CanExecuteRoutedEventArgs e) {
    e.CanExecute = ....;
}