WPF视图模型更新,但视图未更新



当我以编程方式更新视图模型时,视图不更新。

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));
}
}
}

最新更新