Domanda

Creo un UserControl (TableWithFilter.xaml) con una proprietà di dipendenza (sorgente). UserControl è una tabella con una proprietà di origine per i diversi elementi. Ho creato XAML e impostato la proprietà source tramite il binding XAML. Fin qui tutto bene.

Ma se il valore della proprietà di dipendenza viene modificato, il metodo di callback definito non viene chiamato. Pertanto non riesco ad aggiornare le voci nella mia tabella. Qualcuno ha idea del perché il metodo di callback non viene chiamato?

Ecco la definizione della mia proprietà nella classe " TableWithFilter " ;:

Public Shared ReadOnly SourceProperty As DependencyProperty = _
        DependencyProperty.Register("Source", GetType(List(Of TableViewItem)), GetType(TableWithFilter), _
                                    New FrameworkPropertyMetadata(Nothing, New PropertyChangedCallback(AddressOf TableWithFilter.ChangeSource)))

e il metodo Callback:

 Private Shared Sub ChangeSource(ByVal source As DependencyObject, ByVal e As DependencyPropertyChangedEventArgs)
        Dim table As TableWithFilter = source
        table.Source = e.NewValue
    End Sub

e qui XAML:

<Border Grid.Row="1" Grid.Column="1" BorderBrush="{StaticResource ElementBorder}" BorderThickness="1">
    <local:TableWithFilter x:Name="SearchResultTable" Source="{Binding Source={StaticResource contentFacade}, Path=ContentList}" />    
</Border>

Se l'attributo " ContentList " viene modificato, desidero che il " ChangeSource " viene chiamato il metodo nella classe TableWithFilder. Ma non è così. Dopo aver modificato l'attributo ContentList, sollevo il seguente evento:

RaiseEvent PropertyChanged(Me, New PropertyChangedEventArgs("ContentList"))

Grazie per qualsiasi idea.

È stato utile?

Soluzione

C'è una differenza tra la modifica dell'intera proprietà (ovvero un nuovo riferimento a una raccolta che viene specificata) rispetto al contenuto dell'elenco stesso che cambia. Le raccolte hanno una propria interfaccia di notifica delle modifiche denominata INotifyCollectionChanged . Quindi ciò che dovresti fare è ascoltare la modifica della proprietà che hai ora e, al suo interno, agganciare tu stesso gli eventi INotifyCollectionChanged sulla nuova istanza della raccolta e quindi rispondere a quelli.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top