当我以编程方式更新视图模型时,视图不更新。
public class ViewModelBase : INotifyPropertyChanged
{
public event PropertyChangedEventHandler PropertyChanged;
public virtual void OnPropertyChanged(string propertyName)
{
PropertyChanged?.Invoke(this, new PropertyChangedEventArgs(propertyName));
}
}
my model:
public class Payment:ViewModelBase
{
private long _paymentId;
private decimal _price;
[DatabaseGenerated(DatabaseGeneratedOption.None)]
public long PaymentId {
get { return _paymentId; }
set
{
_paymentId = value;
OnPropertyChanged(nameof(PaymentId));
}
}
public decimal Price {
get { return _price; }
set
{
_price = value;
OnPropertyChanged(nameof(Price));
}
}
}
my view model:
class PaymentFactorViewModel : ViewModelBase
{
public PaymentFactorViewModel()
{
PaymentFactor = new PaymentFactor();
PaymentFactor.Price=350,000;
}
private Payment _paymentFactor;
public Payment PaymentFactor
{
get { return _paymentFactor; }
set
{
_paymentFactor = value;
OnPropertyChanged(nameof(PaymentFactor));
}
}
}
my view:
<TextBox x:Name="txtPrice" Text="{Binding PaymentFactor.Price,Mode=TwoWay,UpdateSourceTrigger=PropertyChanged"/>
当我改变TextBox。文本ViewModel将更新,但当我改变ViewModel编程视图不更新。
例如,我设置PaymentFactor。价格=350,000在ViewModel构造函数,但TextBox。文本为0
你发布的代码中有几个错误。
PaymentFactorViewmodel应该是公共的
丢掉,在350000
你没有PaymentFactor类,你有Payment。我看不出这段代码怎么能被编译。
下面的工作对我来说很好。或者至少它显示了350000,正如我所期望的。
我把所有的东西都放在一个命名空间里。
xmlns:local="clr-namespace:WpfApp1"
mc:Ignorable="d"
Title="MainWindow" Height="800" Width="1200">
<Window.DataContext>
<local:PaymentFactorViewModel/>
</Window.DataContext>
<Grid>
<TextBox x:Name="txtPrice" Text="{Binding PaymentFactor.Price,Mode=TwoWay,UpdateSourceTrigger=PropertyChanged}"/>
</Grid>
</Window>
public class PaymentFactorViewModel : ViewModelBase
{
public PaymentFactorViewModel()
{
PaymentFactor = new Payment();
PaymentFactor.Price=350000;
}
private Payment _paymentFactor;
public Payment PaymentFactor
{
get { return _paymentFactor; }
set
{
_paymentFactor = value;
OnPropertyChanged(nameof(PaymentFactor));
}
}
}
public class Payment:ViewModelBase
{
private long _paymentId;
private decimal _price;
public long PaymentId {
get { return _paymentId; }
set
{
_paymentId = value;
OnPropertyChanged(nameof(PaymentId));
}
}
public decimal Price {
get { return _price; }
set
{
_price = value;
OnPropertyChanged(nameof(Price));
}
}
}