none
INotifyPropertyChanged bei "indexer"-Property RRS feed

  • Frage

  • Hallo allerseits,

    ich habe eine Klasse, die über NotifyPropertyChanged gebundene Elemente über Änderung der Indexer-Property benachrichtigen soll.

    Dies ist grundsätzlich auch mit folgenden "Notlösungs"-PropertyNames möglich:

    • null / string.Empty ("") - funktioniert natrülich, da es die Änderung der gesamten Instanz mitteilt
    • Binding.IndexerName ("Item[]") - funktioniert, jedoch wird über eine Änderung des gesamten Indexers benachrichtigt

    Im zweiten Fall aktuallisieren folglich alle gebundenen Elemente ihren Wert und nicht nur jene, die beispielsweise auf den Index "MyKey" gebunden sind. Im Internet liest man hier & da mal von der - naheliegenden - Lösung "Item[MyKey]". Funktioniert jedoch bei mir nicht und bei vielen - aber nicht allen! - ebenfalls nicht. In manchen Fällen scheint diese Lösung zu funktioieren? Oder funktioniert es evtl. nur bei Silverlight 4? Aber wieso dann nicht bei WPF? Ist das ein (bekannter?) Bug?

     

    Danke im Voraus!

    Tristan

    Donnerstag, 31. März 2011 14:46

Alle Antworten

  • Befürchte "pushen" ist hier unbeliebt? ... Hoffe nur doch noch auf eine Antwort bzw. einfach eine Besätigung des Problems?
    Dienstag, 5. April 2011 09:08
  • Am 31.03.2011 16:46, schrieb tris. _:

    Hallo allerseits,

    ich habe eine Klasse, die über NotifyPropertyChanged gebundene Elemente über Änderung der Indexer-Property benachrichtigen soll.

    Dies ist grundsätzlich auch mit folgenden "Notlösungs"-PropertyNames möglich:

    * null / string.Empty ("") - funktioniert natrülich, da es die Änderung der gesamten Instanz mitteilt
    * Binding.IndexerName ("Item[]") - funktioniert, jedoch wird über eine Änderung des*gesamten*   Indexers benachrichtigt

    Im zweiten Fall aktuallisieren folglich alle gebundenen Elemente ihren Wert und nicht nur jene, die beispielsweise auf den Index "MyKey" gebunden sind. Im Internet liest man hier&  da mal von der - naheliegenden - Lösung "Item[MyKey]". Funktioniert jedoch bei mir nicht und bei vielen - *aber nicht allen!* - ebenfalls nicht. In manchen Fällen scheint diese Lösung zu funktioieren? Oder funktioniert es evtl. nur bei Silverlight 4? Aber wieso dann nicht bei WPF? Ist das ein (bekannter?) Bug?

    Was soll den über die Änderung benachrichtigt werden?
    Ein UI-Element? Üblicherweise löst man das so, das man eine ObservableCollection<T> an eine ItemsControl (ListView, DataGrid etc),
    bindet und die Klasse T selbst INotifyPropertyChanged implementiert, dadurch sollten alle Änderungen wahrgenommen werden können.
    Auch ein Austausch eines Element an Index i. (NotifyCollectionChangedAction.Replace)

    Geht natürlich nicht immer und überall.
    Was machst Du konkret?

    Dienstag, 5. April 2011 21:08
  • Es geht mir vor allem nur um die techinsche "Machbarkeit" - interessiert mich ob es möglich ist oder nicht.

    In meinem konkreten Fall enthält meine Klasse mit der indexer-Property DataTemplate & wird in etwa so eingesetzt:

    DataTemplate="{Binding [Person], Source={StaticResource MyTemplates}}", wobei "MyTemplates" eine Instanz meiner Klasse ist. Ändert sich jetzt das Tempalte für "Person", sollen alle UIElements, die dieses verwenden das neue Template erhalten - nicht jedoch ALLE UIElements, die irgendwelche DataTemplates meines Klasse verwenden.

    Mittwoch, 6. April 2011 22:43