2014-02-05 4 views
0

Целью этого вопроса является выяснение способа получения определенного содержимого ObservableCollection (strings), а также их запись в текстовый файл.Запись содержимого ObservableCollection в текстовый файл

Эта коллекция структурирована с использованием узлов, поскольку она используется для реализации TreeView. С этим сказанным я в настоящее время пытаюсь получить дочерние значения родительского узла следующим образом:

//I am currently getting an InvalidOperationException -- Sequence contains no matching element 
var Node = Collection.GetAllChildren(x => x.Children).Distinct().ToList().First(x => x.DisplayName == Name); 

Для того, чтобы записать в файл, я использую этот метод File.: File.WriteAllLines(). Я понимаю, что этот метод принимает имя_файла, а затем IEnumerable (a List и т. Д.). ObservableCollection содержит метод, который соответствует IEnumberable или мне нужно добавить содержимое в List?

Сейчас я пытаюсь это для записи в файл строку:

File.WriteAllLines(FileName, new ObservableCollection<string> { ViewModel.Data.ToList() }); 

Как я могу исправить эти две вредные части моего кода? Каков правильный способ получить нужную мне информацию, а затем добавить ее в файл?

Обновление: Это текущие ошибки, которые я получаю по вышеуказанной строке кода. Если я правильно реализую это (что я, на основе ответов), почему я получаю эти ошибки компиляции? (Примечание: type был включен в string)

Update 2: Я обновил аргумент, который будет записан в файл. Data - ObservableCollection<ViewModel>.

enter image description here

ответ

2

Да, перегрузка File.WriteAllLines принимает IEnumerable<string>. ObservableCollection<string> реализует IEnumerable<string>, поэтому все должно работать.

Просто Type должен быть string:

File.WriteAllLines(FileName, new ObservableCollection<Type> (NodeName.ToList())); 

Does ObservableCollection содержит метод, который IEnumberable совместим

Нет, реализует IEnumerable.

P.S. Как предлагается в другом ответе, ObservableCollection является избыточным. Вы можете передать все, что реализует IEnumerable<string>.

+0

Хорошо, я должен реализует это правильно теперь зависит от вашего ответа. Тем не менее, я все еще получаю ошибки компиляции. Пожалуйста, взгляните на мое обновление. –

+0

@ Eric Во-первых, если 'ObservableCollection ' построен с аргументом списка, синтаксис должен быть 'new ObservableCollection (list)', с круглыми скобками, см. Мое последнее редактирование. Но, пожалуйста, обратите внимание, как отметил Kaz-LA, что вы можете использовать список как есть, не обертывая его «ObservableCollection». Во-вторых, ошибка говорит о том, что мы не имеем дело с «List », но с «List ». Каков тип 'NodeName'? Вы уверены, что ошибка компиляции вызвана указанной вами линией? – AlexD

+0

На самом деле это выглядит так: 'File.WriteAllLines (FileName, new ObservableCollection {ViewModel.ObservableCollection .ToList()});' –

0

Если вы посмотрите на подпись System.IO.File.WriteAllLines(), он принимает массив строк или IEnumerable строк;

Попробуйте это:

File.WriteAllLines(FileName, NodeName.ToList()); 
Смежные вопросы