Wpf 当usercontrol更新模型时,对模型中的更改作出反应

Wpf 当usercontrol更新模型时,对模型中的更改作出反应,wpf,data-binding,Wpf,Data Binding,我已经创建了一个自定义控件,它使用mvvm light通过双向绑定来更新我的模型 <cbtn:BillCounter Value="{Binding MoneyTypes[0].Paid, Mode=TwoWay }" /> MoneyTypes是一个包含多个类型的数组。我看到,当我检查该数组时,我的更改已经传递到模型中的数组,值被更新。但是,我需要根据正在发生的更改重新计算其他值。是否有任何方法可以通知我的模型,我在上面使用的绑定类型发生了更改 这是这个问题的继续:,但现在我

我已经创建了一个自定义控件,它使用mvvm light通过双向绑定来更新我的模型

<cbtn:BillCounter Value="{Binding MoneyTypes[0].Paid, Mode=TwoWay }" />

MoneyTypes是一个包含多个类型的数组。我看到,当我检查该数组时,我的更改已经传递到模型中的数组,值被更新。但是,我需要根据正在发生的更改重新计算其他值。是否有任何方法可以通知我的模型,我在上面使用的绑定类型发生了更改

这是这个问题的继续:,但现在我需要让模型对自定义控件所做的更改做出反应


谢谢

无论第三属性更新什么属性,模型只需要调用PropertyChanged。因此,对于每个属性,他们首先会更新其属性
PropertyChanged(“PropertyName”)
,然后会更新依赖此属性的其他属性
PropertyChanged(“SomeOtherProperty”)基本上,您只需调用一系列属性更改事件,将其弹出到UI以查看新的计算。

无论三级属性更新什么属性,模型只需调用PropertyChanged即可。因此,对于每个属性,他们首先会更新其属性
PropertyChanged(“PropertyName”)
,然后会更新依赖此属性的其他属性
PropertyChanged(“SomeOtherProperty”)基本上,您只需调用一系列属性更改事件,将其弹出到UI以查看新的计算。

无论三级属性更新什么属性,模型只需调用PropertyChanged即可。因此,对于每个属性,他们首先会更新其属性
PropertyChanged(“PropertyName”)
,然后会更新依赖此属性的其他属性
PropertyChanged(“SomeOtherProperty”)基本上,您只需调用一系列属性更改事件,将其弹出到UI以查看新的计算。

无论三级属性更新什么属性,模型只需调用PropertyChanged即可。因此,对于每个属性,他们首先会更新其属性
PropertyChanged(“PropertyName”)
,然后会更新依赖此属性的其他属性
PropertyChanged(“SomeOtherProperty”)
基本上,您只需调用一系列属性更改事件,将其气泡化回UI即可查看新计算。

假设您的
MoneyType
类正在实现
INotifyPropertyChanged
,您可以在
视图模型
中收听更改事件,并在事件发生时通知
模型

这里有一个
ViewModel
,它将订阅所有
MoneyType
更改。每当发生更改时,只需调用
模型上的方法
即可重新计算

public class MyViewModel 
{
    private IMyModel _myModel;

    public MyViewModel(MyModel myModel)
    {
        _myModel = myModel;

        foreach (var moneyType in MoneyType)
        {
            moneyType.OnPropertyChanged += MoneyTypePropetyChanged;
        }
    }

    private void OnMoneyTypePropetyChanged(object sender, PropertyChangedEventArgs e)
    {
        _myModel.NotifyMoneyTypeChanged();   
    }
}
在模型中公开所需的方法

public class MyModel : IMyModel
{
    public void NotifyMoneyTypeChanged()   
    {
       // do work here
    }
}

假设您的
MoneyType
类正在实现
INotifyPropertyChanged
,您可以在
ViewModel
中侦听更改事件,并在事件发生时通知
Model

这里有一个
ViewModel
,它将订阅所有
MoneyType
更改。每当发生更改时,只需调用
模型上的方法
即可重新计算

public class MyViewModel 
{
    private IMyModel _myModel;

    public MyViewModel(MyModel myModel)
    {
        _myModel = myModel;

        foreach (var moneyType in MoneyType)
        {
            moneyType.OnPropertyChanged += MoneyTypePropetyChanged;
        }
    }

    private void OnMoneyTypePropetyChanged(object sender, PropertyChangedEventArgs e)
    {
        _myModel.NotifyMoneyTypeChanged();   
    }
}
在模型中公开所需的方法

public class MyModel : IMyModel
{
    public void NotifyMoneyTypeChanged()   
    {
       // do work here
    }
}

假设您的
MoneyType
类正在实现
INotifyPropertyChanged
,您可以在
ViewModel
中侦听更改事件,并在事件发生时通知
Model

这里有一个
ViewModel
,它将订阅所有
MoneyType
更改。每当发生更改时,只需调用
模型上的方法
即可重新计算

public class MyViewModel 
{
    private IMyModel _myModel;

    public MyViewModel(MyModel myModel)
    {
        _myModel = myModel;

        foreach (var moneyType in MoneyType)
        {
            moneyType.OnPropertyChanged += MoneyTypePropetyChanged;
        }
    }

    private void OnMoneyTypePropetyChanged(object sender, PropertyChangedEventArgs e)
    {
        _myModel.NotifyMoneyTypeChanged();   
    }
}
在模型中公开所需的方法

public class MyModel : IMyModel
{
    public void NotifyMoneyTypeChanged()   
    {
       // do work here
    }
}

假设您的
MoneyType
类正在实现
INotifyPropertyChanged
,您可以在
ViewModel
中侦听更改事件,并在事件发生时通知
Model

这里有一个
ViewModel
,它将订阅所有
MoneyType
更改。每当发生更改时,只需调用
模型上的方法
即可重新计算

public class MyViewModel 
{
    private IMyModel _myModel;

    public MyViewModel(MyModel myModel)
    {
        _myModel = myModel;

        foreach (var moneyType in MoneyType)
        {
            moneyType.OnPropertyChanged += MoneyTypePropetyChanged;
        }
    }

    private void OnMoneyTypePropetyChanged(object sender, PropertyChangedEventArgs e)
    {
        _myModel.NotifyMoneyTypeChanged();   
    }
}
在模型中公开所需的方法

public class MyModel : IMyModel
{
    public void NotifyMoneyTypeChanged()   
    {
       // do work here
    }
}

因此,基本上,
视图
中的自定义控件会导致
模型
中的更改,然后在
视图模型
中拾取这些更改,然后调用
模型
中的函数来触发更新计算?您应该绑定到视图模型(将模型公开到视图)。然后ViewModel将获得所有更改通知,您可以从这里通知模型。您的模型是什么样子的?因此基本上,
视图中的自定义控件会导致
模型
中的更改,然后在
视图模型
中拾取这些更改,然后调用
模型
中的函数来触发更新计算?您应该绑定到视图模型(将模型公开给视图)。然后,ViewModel将获得所有更改通知,从这里您可以通知模型。您的模型是什么样子的?因此基本上,
视图中的自定义控件会导致
模型中的更改,这些更改会在
视图模型中拾取,然后调用
模型中的函数要触发更新计算,您应该绑定到ViewModel(它将模型公开给视图)。然后,ViewModel将获得所有更改通知,从这里您可以通知模型。您的模型是什么样子的?因此基本上,
视图中的自定义控件会导致
模型中的更改,然后在