Добавить дерево в приложении wpf, нажав на кнопку в C # - PullRequest
0 голосов
/ 10 июня 2018

Я новичок в c #, и это моя первая программа, в которой я пытаюсь добавить данные в дерево и отобразить их при нажатии кнопки
Это код кнопки, который добавляет данные в виде дерева и отображает их

   public MainWindow()
    {
        InitializeComponent();
    }
    private void Button_Click_1(object sender, RoutedEventArgs e)
    {
        var subModules = new List<ITreeNode>
    {
        new SubModule { Name = "Sub Module 1" }
    };
        var subThreads = new List<ITreeNode>
    {
        new SubThread { Name = "Sub Thread 1" }
    };
        var nodes = new List<ITreeNode>
    {
        new Thread { Name = "Thread ", ChildNodes = subThreads },
        new Module { Name = "Module ", ChildNodes = subModules }
    };
        var runprocesses = new List<RunProcesses>
    {
        new RunProcesses{ Name = "Process1", ChildNodes = nodes }
    };
         TreeView.ItemsSource = RunProcesses;


    }

Это xmal код

<TreeView x:Name="TreeView">
   ` <Button Content="Button" VerticalAlignment="Top" 
     Width="75"Click="Button_Click_1"/>
    <TreeView.Resources>
        <HierarchicalDataTemplate DataType="{x:Type local:RunProcesses}" 
        ItemsSource="{Binding ChildNodes}">
            <StackPanel Orientation="Horizontal">
                <TextBlock Text="{Binding Path=Name, StringFormat='{}{0} '}"/>
                <TextBlock Text="{Binding Path=ID, StringFormat=(ID: {0})}" />
            </StackPanel>
        </HierarchicalDataTemplate>
        <HierarchicalDataTemplate DataType="{x:Type local:Module}" ItemsSource="{Binding ChildNodes}">
            <TextBlock Text="{Binding Path=Name}" />
        </HierarchicalDataTemplate>

        <HierarchicalDataTemplate DataType="{x:Type local:Thread}" ItemsSource="{Binding ChildNodes}">
            <StackPanel Orientation="Horizontal">
                <TextBlock Text="{Binding Path=Name, StringFormat='{}{0} '}" />
                <TextBlock Text="{Binding Path=ID, StringFormat=(ID: {0})}" />
            </StackPanel>
        </HierarchicalDataTemplate>
        <HierarchicalDataTemplate DataType="{x:Type local:SubThread}" ItemsSource="{Binding ChildNodes}">
            <TextBlock Text="{Binding Path=Name}" />
        </HierarchicalDataTemplate>
    </TreeView.Resources>

</TreeView>

Этот код компилируется и работает правильно, но когда я нажимаю на кнопку, система выдает исключение

System.invalidoperationexception: 'items collection must be empty before using itemssource.'

Я приложил много усилий для определения причины исключения, но безуспешно
Пожалуйста, направьте меня туда, где я неправ

1 Ответ

0 голосов
/ 10 июня 2018

Вам необходимо переместить разметку <button> за пределы TreeView.В противном случае свойство TreeView ItemCollection инициализируется так, что ItemCollection имеет элемент Button, и, следовательно, вы не можете установить ItemsSource, как описано в ошибке.

Подумайте над тем, чтобы расположить дерево и кнопку в каком-либо контейнере вместо кнопки вложенности в дереве:

<StackPanel>
  <Button/>
  <TreeView/>
</StackPanel>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...