Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > WPF и Silverlight > Добавление и удаление данных в TreeView


Автор: shmarov 19.10.2009, 16:12
Добрый день

Столкнулся со странной ситуацией - при добавлении и удалении данных в дереве не отображаются изменения. В книге Мак-Дональда написано, что данная проблема решается путем использования ObservableCollection<>, однако мне это не помогло. Помогите пожалуйста разобраться с ситуацией.

Исходные данные:
Код

        DataClasses1DataContext _db;

        public Window1()
        {
            ...

            _db = new DataClasses1DataContext();
            ObservableCollection<TProject> _projects = new ObservableCollection<TProject>
                (from p in _db.TProjects
                 where p.Leaf == false & p.NodeReference == null
                 select p);

            treeGroup.ItemsSource = _projects;
        }

        private void Button_Click(object sender, RoutedEventArgs e)
        {
                    TProject _project = new TProject();
                    _project.IDProject = 2;
                    _project.Leaf = false;
                    _project.ProjectEn = "ProjectName";
                    _db.TProjects.InsertOnSubmit(_project);
                    _db.SubmitChanges();
        }


XAML:
Код

        <TreeView Name="treeGroup" Grid.Row="1" Grid.Column="0">
            <TreeView.ItemTemplate>
                <HierarchicalDataTemplate ItemsSource="{Binding Path=TProjects}">
                    <TextBlock Text="{Binding Path=ProjectEn}"></TextBlock>
                </HierarchicalDataTemplate>
            </TreeView.ItemTemplate>
        </TreeView>


Благодарю.

UPD: да, описания для классов LINQ сгенерированы автоматически в студии.
Код

        public partial class TProject : INotifyPropertyChanging, INotifyPropertyChanged
        {
                private static PropertyChangingEventArgs emptyChangingEventArgs = new PropertyChangingEventArgs(String.Empty);
                ...
                private EntitySet<TProject> _TProjects;
        }

Хммм, Может быть собака как раз в этом зарыта?

Автор: math64 20.10.2009, 07:28
А как вносятся изменеия в базу? Если прямо в _db, то ObservableCollection про эти изменения не знает - она сохранила данные которые выдал LINQ, насколько я понимаю, и они больше не изменяются. Данные нужно добавлять/удалять через ObservableCollection.

Автор: shmarov 20.10.2009, 13:48
math64, если их добавлять через ObservableCollection, то ситуация будет диаметрально противоположной - в дереве будут изменения, в базе нет.
Оказалось, что проблема была действительно в описании linq-классов. Разобрав http://www.phoenixsoft.com.ua/ru/Blogs/WPFTreeView.aspx получил нужный мне результат.

Автор: SoCodeMonkey 22.9.2010, 11:42
Ссылка за год приказала долго жить ( Может, кто подскажет решение ? 

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)