gpt4 book ai didi

c# - WPF:绑定(bind)到自定义类属性。 PropertyChanged 已触发但 View 未更新

转载 作者:行者123 更新时间:2023-11-30 17:18:06 25 4
gpt4 key购买 nike

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

绑定(bind)工作正常,因为正在显示属性的初始值,但当属性更改时,文本框不会更新。

PropertyChanged 事件被触发并且参数拼写正确。

代码如下:

这是带有绑定(bind)的文本框:

<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

最佳答案

您的转换器未正确指定。在 UserControl.Resources 中指定转换器类的实例,然后在 TextBlock 中引用该实例

<UserControl.Resources>
<util:SpieltagDatenToStringConverter x:Key="mySpieltagDatenToStringConverter" />
</UserControl.Resources>

<TextBlock Name="textBlockGespielt"
Text="{Binding Path=MySpieltag.Daten,
Converter={StaticResource mySpieltagDatenToStringConverter},
ConverterParameter=SpieleGespielt,
UpdateSourceTrigger=PropertyChanged}" />

关于c# - WPF:绑定(bind)到自定义类属性。 PropertyChanged 已触发但 View 未更新,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6020246/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com