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