سؤال

آسف - سؤالي متطابق تقريبًا هذا ولكن نظرًا لأنها لم تتلقى إجابة قابلة للحياة ، آمل أن يكون لدى شخص آخر بعض الأفكار الجديدة.

لدي WPF TreeView مرتبط بتسلسل هرمي لنوع واحد:

public class Entity
{
    public string Title { get; set; }
    public ObservableCollection<Entity> Children { get; set; }
}

تقوم فئة الكيان بتنفيذ InotifyPropertyChanged ، لكنني حذفت هذا الرمز من أجل الوضوح.

يرتبط TreeView بـ ObservableCollectionu003CEntity> وكل حالة كيان تكشف مجموعة من مثيلات الكيان المحتوية عبر ممتلكات أطفالها:

<TreeView ItemsSource="{Binding Path=Entities}">
    <TreeView.Resources>
        <HierarchicalDataTemplate DataType="{x:Type local:Entity}" ItemsSource="{Binding Path=Children}">
           <TextBlock Text="{Binding Path=Title}" />
        </HierarchicalDataTemplate>
   </TreeView.Resources>
</TreeView>

في البداية ، يرتبط TreeView كما هو متوقع ويعرض بشكل صحيح تسلسل هرمي متعدد المستويات. أيضًا ، عندما يتم تعديل عضوية إحدى مجموعات الأطفال برمجيًا ، تنعكس التغييرات بشكل صحيح في TreeView.

ومع ذلك ، التغييرات في عضوية مستوى عضو الجذر ObserableCollectionu003CEntity> لا تنعكس في TreeView.

سيكون موضع تقدير أي اقتراحات.

شكرا يا تيم

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

المحلول

تخميني الأولي هو أن لديك شيء مثل ما يلي لعقدة الجذر:

public ObservableCollection<Entity> Entities
{
    get;
    set;
}

ثم ، بدلاً من فعل شيء جيد مثل ما يلي:

Entities.Clear();
foreach (var item in someSetOfItems)
    Entities.Add(item);

أنت تفعل شيئًا [سيئًا] مثل هذا:

Entities = new ObservableCollection<Entity>(someSetOfItems);

يجب أن تكون قادرًا على تعقب المشكلة عن طريق جعل مجال دعم خاصية الكيانات readonly:

private readonly ObservableCollection<Entity> _entities
    = new ObservableCollection<Entity>();

public ObservableCollection<Entity> Entities
{
    get
    {
        return _entities;
    }
}

نصائح أخرى

شرح إضافي ، وقت طويل للإجابة ، لكنني أعتقد أنه إذا قمت بالربط في XAML ، ثم في الكود ، قم بتعيين كائن جديد للخاصية التي تقوم بتكسيرها ، لذلك يجب عليك إعادة الربط في الكود لذلك للعمل. وبالتالي الحل مع حقل الدعم القراءة. إذا كنت تفعل مثل ذلك ، فلن تتمكن من تعيين ObservableCollection جديد ولن تقوم بتقسيم الربط عن طريق تعيين كائن جديد إلى حقل الدعم.

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top