C# WPF:绑定到自定义类属性。已激发PropertyChanged,但视图未更新

C# WPF:绑定到自定义类属性。已激发PropertyChanged,但视图未更新,c#,wpf,inotifypropertychanged,C#,Wpf,Inotifypropertychanged,我有一个自定义类Spieltag,其中包含一个属性SpieltagDaten(自定义类)。SPieltagDaten有一个名为SpieleGespielt的属性。我已将此属性设置为textbox文本属性上绑定的目标 当显示属性的初始值时,绑定工作正常,但当属性更改时,文本框不会更新 触发PropertyChanged事件,参数拼写正确 这是代码的样子: 这是带有绑定的文本框: 在我设置的窗口的构造函数中 this.DataContext = this; 这是包含名为Daten的属性的模型的

我有一个自定义类Spieltag,其中包含一个属性SpieltagDaten(自定义类)。SPieltagDaten有一个名为SpieleGespielt的属性。我已将此属性设置为textbox文本属性上绑定的目标

当显示属性的初始值时,绑定工作正常,但当属性更改时,文本框不会更新

触发PropertyChanged事件,参数拼写正确

这是代码的样子:

这是带有绑定的文本框:


在我设置的窗口的构造函数中

this.DataContext = this;
这是包含名为Daten的属性的模型的根类:

public class Spieltag : ModelBase    {

    private ISpieltagDaten daten;

    public ISpieltagDaten Daten
    {
        get { return daten; }
        set { daten = value; Changed("Daten"); }
    }
}
SpieltagDaten包含一个属性SpieleGespielt

public class SpieltagDaten : ModelBase, interfaces.ISpieltagDaten
{
    private int _spieleGespielt;

    public Int32 SpieleGespielt
    {
        get { return _spieleGespielt; }
        set { _spieleGespielt = value; Changed("SpieleGespielt"); }
    }
}
ModelBase实现INotifyPropertyChanged:

public class ModelBase: INotifyPropertyChanged
{
    public event PropertyChangedEventHandler PropertyChanged = delegate { };

    protected void Changed(String propertyName)
    {
        PropertyChangedEventHandler handler = PropertyChanged;
        if (handler != null)
        {
            handler(this, new PropertyChangedEventArgs(propertyName));
        }
    }
}
编辑:

我忘记贴转换器了。它源自MarkupExtension,因此我可以在xaml中轻松使用它:

class SpieltagDatenToStringConverter : MarkupExtension, IValueConverter
{
    private static SpieltagDatenToStringConverter _converter = null;
    public override object ProvideValue(IServiceProvider serviceProvider)
    {
        if (_converter == null)
        {
            _converter = new SpieltagDatenToStringConverter();
        }
        return _converter;
    }

    public object Convert(object value, Type targetType,
        object parameter, System.Globalization.CultureInfo culture)
    {
        ISpieltagDaten daten = (ISpieltagDaten)value;

        string res = String.Empty;

        string propertyName = parameter.ToString();


            PropertyInfo pi = typeof(ISpieltagDaten).GetProperty(propertyName);

            if (pi != null)
            {
                 res = pi.GetValue(daten,null).ToString();
            }

        return res;
    }


    public object ConvertBack(object values, Type targetType,
        object parameter, System.Globalization.CultureInfo culture)
    {
        throw new NotImplementedException();
    }
}
在模型初始设置时调用转换器。
未正确指定转换器。在UserControl.Resources中指定转换器类的实例,然后在TextBlock中引用该实例



您确定转换器工作正常吗?请尝试在转换器内设置断点。如果在引发属性更改时未命中,则绑定不起作用。是的,转换器工作正常,在设置初始值时调用,但在更改模型值时未调用。很抱歉,我忘记发布转换器。我已经编辑了我的帖子。转换器源自MarkupExtension,在模型中设置初始值且视图成功更新时调用它。但当我更改模型值时,它不会再次调用。我再次遇到这个问题,并将代码更改为您建议的代码,它可以工作-似乎我去年尝试时犯了一个错误。。。