我有一個自定義類Spieltag包含一個屬性SpieltagDaten(自定義類)。 SPieltagDaten擁有一個名爲SpieleGespielt的房產。我已經將此屬性設置爲文本框文本屬性的綁定目標。WPF:綁定到自定義類的屬性。 PropertyChanged被解僱但視圖不更新
該綁定工作得很好,因爲該屬性的初始值是beeing顯示,但當屬性更改文本框不beeing更新。
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"); }
}
}
模型庫實現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();
}
}
該轉換器beeing呼籲模型的初始設置。
你確定轉換器工作正常? – 2011-05-16 16:20:33
嘗試在該轉換器中放置一個斷點。如果在提高屬性更改時未命中,則綁定不起作用。 – decyclone 2011-05-16 17:02:53
是的,轉換器工作正常,它在初始值被設置但是當我改變模型值時不被調用時被調用。 – chaosr 2011-05-17 14:38:34