Как выбрать и прочитать текстовый файл из дерева просмотра WPF - PullRequest
0 голосов
/ 28 апреля 2020

Я хочу создать приложение заметок для моего первого проекта. И я дошел до того, что создал файл и разместил его в виде дерева. Теперь я хочу выбрать файл в виде дерева и открыть его в текстовом поле. Я не могу найти способ выбрать файл.

Это мой TreeView, я пытался использовать SelecetedItemChanged

                <Style TargetType="{x:Type TreeViewItem}">
                    <Setter Property="HeaderTemplate">
                        <Setter.Value>
                            <DataTemplate>
                                <StackPanel Orientation="Horizontal">
                                    <Image Width="10" Margin="3" Source="images/drive.png"/>
                                    <TextBlock VerticalAlignment="Center" Text="{Binding}"/>
                                </StackPanel>
                            </DataTemplate>
                        </Setter.Value>
                    </Setter>
                </Style>

            </TreeView.Resources>
        </TreeView>

, а вот мой C# код

private void FolderView_SelectedItemChanged(object sender, RoutedPropertyChangedEventArgs<object> e)
        {
            // get selected item path

            string fileName = FolderView.SelectedValuePath;

            using (StreamReader sr = File.OpenText(fileName))
            {
                string s = "";
                while ((s = sr.ReadLine()) != null)
                {
                    noteText.Text = s;
                }
            }
        }

У меня есть также заметил, что люди используют разные типы стилей или подходов дерева, как некоторые используют элементы, дочерние элементы или узлы. Я думаю, они одинаковы, верно?

Большое спасибо.

1 Ответ

0 голосов
/ 01 мая 2020

Ваша проблема в этой строке:

string fileName = FolderView.SelectedValuePath;

Вот документация по SelectedValuePath, это не то, что вы используете, когда пытаетесь получить фактическое выбранное значение .

Судя по вашему коду, каждый элемент в TreeView выглядит просто как string, поэтому попробуйте этот код:

string fileName = (string)FolderView.SelectedItem;

РЕДАКТИРОВАТЬ:

Вы говорите в своих комментариях, что SelectedItem возвращает TreeViewItem. В этом случае это может сработать:

string fileName = (string)((TreeViewItem)FolderView.SelectedItem).DataContext;
...