C# 当codebehind中的值更改时,Usercontrol未更新

C# 当codebehind中的值更改时,Usercontrol未更新,c#,xaml,data-binding,C#,Xaml,Data Binding,我有一个在运行时更新的viewmodel类。但是,如果viewmodel中的值在运行时在codebehind中更改,则不会更新视图。我哪里出错了 viewmodel如下所示: public class vmA : modelA, INotifyPropertyChanged { public event PropertyChangedEventHandler PropertyChanged; private void OnPropertyChanged(PropertyChan

我有一个在运行时更新的viewmodel类。但是,如果viewmodel中的值在运行时在codebehind中更改,则不会更新视图。我哪里出错了

viewmodel如下所示:

public class vmA : modelA, INotifyPropertyChanged
{
    public event PropertyChangedEventHandler PropertyChanged;

    private void OnPropertyChanged(PropertyChangedEventArgs propertyChangedEventArgs)
    {
        PropertyChanged?.Invoke(this, new PropertyChangedEventArgs(propertyChangedEventArgs.PropertyName));
    }

    public vmA ()
    {
        SomeValue = 254.43F; //This value is shown when the control is loaded
    }

    public void SetSomeValue(int _someValue)
    {
        SomeValue = _someValue; // If this is executed, the view still shows 254.43, even though _someValue contains a different value
    }
}
模型(由viewmodel继承)类如下所示

public class modelA : INotifyPropertyChanged
{
    public event PropertyChangedEventHandler PropertyChanged;

    public void OnPropertyChanged(PropertyChangedEventArgs propertyChangedEventArgs)
    {
        PropertyChanged?.Invoke(this, new PropertyChangedEventArgs(propertyChangedEventArgs.PropertyName));
    }

    private int someValue

    public int SomeValue
    {
        get { return someValue
        set { someValue value; OnPropertyChanged(new PropertyChangedEventArgs("SomeValue")); }                  
    }
}
<UserControl.DataContext>
    <vm:vmA></vm:vmA>
</UserControl.DataContext>
装订是这样做的

public class modelA : INotifyPropertyChanged
{
    public event PropertyChangedEventHandler PropertyChanged;

    public void OnPropertyChanged(PropertyChangedEventArgs propertyChangedEventArgs)
    {
        PropertyChanged?.Invoke(this, new PropertyChangedEventArgs(propertyChangedEventArgs.PropertyName));
    }

    private int someValue

    public int SomeValue
    {
        get { return someValue
        set { someValue value; OnPropertyChanged(new PropertyChangedEventArgs("SomeValue")); }                  
    }
}
<UserControl.DataContext>
    <vm:vmA></vm:vmA>
</UserControl.DataContext>

文本框绑定:

<TextBox x:Name="tbBetragNetto" Text='{Binding BetragNetto, Mode=TwoWay}' Grid.Column="0"/>

因为您有2个
INotifyPropertyChanged
实现。绑定与希望它侦听的
PropertyChanged
事件相混淆。将视图模型收缩到以下位置:

public class vmA : modelA
{
    public vmA()
    {
        SomeValue = 254.43F; //This value is shown when the control is loaded
    }

    public void SetSomeValue(int _someValue)
    {
        SomeValue = _someValue; // If this is executed, the view still shows 254.43, even though _someValue contains a different value
    }
}

谢谢。我试试看。然后是否会通知视图有关viewmodel中的更改,例如,如果我向viewmodel添加了另一个属性?是。由于视图模型继承自实现了
INotifyPropertyChanged
的某些内容,因此它也将自然地拥有它。谢谢!很好