我有一个自定义类Spieltag,包含属性SpieltagDaten(自定义类)。 SpieltagDaten具有称为SpieleGespielt的属性。 我已将此属性设置为文本框文本属性上绑定的目标。
绑定起作用了,因为属性的初始值被显示出来了,但是当属性更改时,文本框没有更新。
PropertyChanged事件被触发,并且参数拼写正确。以下是代码示例:
这是带有绑定的文本框:
在窗口的构造函数中,我设置了...
转换器在模型的初始设置中被调用。
绑定起作用了,因为属性的初始值被显示出来了,但是当属性更改时,文本框没有更新。
PropertyChanged事件被触发,并且参数拼写正确。以下是代码示例:
这是带有绑定的文本框:
<TextBlock Name="textBlockGespielt"
Text="{Binding Path=MySpieltag.Daten,
Converter={util:SpieltagDatenToStringConverter},
ConverterParameter=SpieleGespielt,
UpdateSourceTrigger=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();
}
}
转换器在模型的初始设置中被调用。
![enter image description here](https://istack.dev59.com/xEnot.webp)