سؤال

وأنا خلق على UserControl (TableWithFilter.xaml) مع خاصية تبعية (المصدر). في UserControl هو الجدول مع خاصية مصدر للعناصر المختلفة. وما خلقت XAML وتعيين الخاصية مصدر عبر XAML ملزم. حتى الآن جيد جدا.

ولكن إذا تم تغيير قيمة العقار التبعية، لا يتم استدعاء أسلوب رد اتصال محددة. لذلك أنا لا يمكن تحديث الإدخالات في مائدتي. وقد أي شخص فكرة لماذا لا يتم استدعاء أسلوب الاستدعاء؟

وهنا هو تعريف ممتلكاتي في فئة "TableWithFilter":

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

ووطريقة الاستدعاء:

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

وهنا 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>

وإذا كانت السمة "ContentList" يتم تغيير I expet أن طريقة "ChangeSource" في فئة TableWithFilder يسمى. ولكن هذا ليس هو الحال. بعد أن غيرت السمة ContentList، ورفع الحدث التالي:

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

وتشك لأية أفكار.

هل كانت مفيدة؟

المحلول

وهناك فرق بين ممتلكات أسرة تغيير (أي إشارة جديدة إلى مجموعة يتم تحديد) مقابل محتويات القائمة نفسها المتغيرة. ومجموعاتها الخاصة واجهة إعلام تغيير تسمى INotifyCollectionChanged . ذلك ما كنت بحاجة لفعله هو الاستماع لتغيير الخاصية لديك الآن، وداخل ذلك، ربط الأحداث INotifyCollectionChanged نفسك على سبيل المثال مجموعة جديدة ومن ثم الرد على هؤلاء.

scroll top