TreeView: child node's VM being affected by parent selection





.everyoneloves__top-leaderboard:empty,.everyoneloves__mid-leaderboard:empty,.everyoneloves__bot-mid-leaderboard:empty{ height:90px;width:728px;box-sizing:border-box;
}







0















What's wrong with the following TreeView setup? Setting selected property of parent node's VM toggles child node's selected property.



<TreeView ItemsSource="{Binding Documents}">
<TreeView.ItemContainerStyle>
<Style TargetType="TreeViewItem">
<Setter Property="IsExpanded" Value="True" />
<Setter Property="IsSelected" Value="{Binding selected}" />
</Style>
</TreeView.ItemContainerStyle>

<TreeView.ItemTemplate>
<HierarchicalDataTemplate ItemsSource="{Binding descriptions}">
<HierarchicalDataTemplate.ItemContainerStyle>
<Style TargetType="TreeViewItem">
<Setter Property="IsSelected" Value="{Binding selected}" />
</Style>
</HierarchicalDataTemplate.ItemContainerStyle>
<HierarchicalDataTemplate.ItemTemplate>
<DataTemplate>
<StackPanel Orientation="Horizontal">
<TextBlock Text="{Binding name}" />
</StackPanel>
</DataTemplate>
</HierarchicalDataTemplate.ItemTemplate>
<TextBlock Text="{Binding name}" />
</StackPanel>
</HierarchicalDataTemplate>
</TreeView.ItemTemplate>
</TreeView>


The VM objects look like this:



public class DocumentVM : ObservableObject
{
private string _name;
public string name
{
get { return _name; }
set { Set(ref _name, value); }
}

private bool _selected = false;
public bool selected
{
get { return _selected; }
set { Set(ref _selected, value); }
}
}


DescriptionVM is very similar.



So for example, if I run the following two lines:



MyVM.Documents[1].descriptions[0].selected = true;
MyVM.Documents[1].selected = true;


First line sets first child of second document to selected, whereas the second line sets first document node to select, but sets first child of second document to unselected. I'm sure this is something wrong with the DataTemplates I'm using there, but can't figure out what that is.










share|improve this question































    0















    What's wrong with the following TreeView setup? Setting selected property of parent node's VM toggles child node's selected property.



    <TreeView ItemsSource="{Binding Documents}">
    <TreeView.ItemContainerStyle>
    <Style TargetType="TreeViewItem">
    <Setter Property="IsExpanded" Value="True" />
    <Setter Property="IsSelected" Value="{Binding selected}" />
    </Style>
    </TreeView.ItemContainerStyle>

    <TreeView.ItemTemplate>
    <HierarchicalDataTemplate ItemsSource="{Binding descriptions}">
    <HierarchicalDataTemplate.ItemContainerStyle>
    <Style TargetType="TreeViewItem">
    <Setter Property="IsSelected" Value="{Binding selected}" />
    </Style>
    </HierarchicalDataTemplate.ItemContainerStyle>
    <HierarchicalDataTemplate.ItemTemplate>
    <DataTemplate>
    <StackPanel Orientation="Horizontal">
    <TextBlock Text="{Binding name}" />
    </StackPanel>
    </DataTemplate>
    </HierarchicalDataTemplate.ItemTemplate>
    <TextBlock Text="{Binding name}" />
    </StackPanel>
    </HierarchicalDataTemplate>
    </TreeView.ItemTemplate>
    </TreeView>


    The VM objects look like this:



    public class DocumentVM : ObservableObject
    {
    private string _name;
    public string name
    {
    get { return _name; }
    set { Set(ref _name, value); }
    }

    private bool _selected = false;
    public bool selected
    {
    get { return _selected; }
    set { Set(ref _selected, value); }
    }
    }


    DescriptionVM is very similar.



    So for example, if I run the following two lines:



    MyVM.Documents[1].descriptions[0].selected = true;
    MyVM.Documents[1].selected = true;


    First line sets first child of second document to selected, whereas the second line sets first document node to select, but sets first child of second document to unselected. I'm sure this is something wrong with the DataTemplates I'm using there, but can't figure out what that is.










    share|improve this question



























      0












      0








      0








      What's wrong with the following TreeView setup? Setting selected property of parent node's VM toggles child node's selected property.



      <TreeView ItemsSource="{Binding Documents}">
      <TreeView.ItemContainerStyle>
      <Style TargetType="TreeViewItem">
      <Setter Property="IsExpanded" Value="True" />
      <Setter Property="IsSelected" Value="{Binding selected}" />
      </Style>
      </TreeView.ItemContainerStyle>

      <TreeView.ItemTemplate>
      <HierarchicalDataTemplate ItemsSource="{Binding descriptions}">
      <HierarchicalDataTemplate.ItemContainerStyle>
      <Style TargetType="TreeViewItem">
      <Setter Property="IsSelected" Value="{Binding selected}" />
      </Style>
      </HierarchicalDataTemplate.ItemContainerStyle>
      <HierarchicalDataTemplate.ItemTemplate>
      <DataTemplate>
      <StackPanel Orientation="Horizontal">
      <TextBlock Text="{Binding name}" />
      </StackPanel>
      </DataTemplate>
      </HierarchicalDataTemplate.ItemTemplate>
      <TextBlock Text="{Binding name}" />
      </StackPanel>
      </HierarchicalDataTemplate>
      </TreeView.ItemTemplate>
      </TreeView>


      The VM objects look like this:



      public class DocumentVM : ObservableObject
      {
      private string _name;
      public string name
      {
      get { return _name; }
      set { Set(ref _name, value); }
      }

      private bool _selected = false;
      public bool selected
      {
      get { return _selected; }
      set { Set(ref _selected, value); }
      }
      }


      DescriptionVM is very similar.



      So for example, if I run the following two lines:



      MyVM.Documents[1].descriptions[0].selected = true;
      MyVM.Documents[1].selected = true;


      First line sets first child of second document to selected, whereas the second line sets first document node to select, but sets first child of second document to unselected. I'm sure this is something wrong with the DataTemplates I'm using there, but can't figure out what that is.










      share|improve this question
















      What's wrong with the following TreeView setup? Setting selected property of parent node's VM toggles child node's selected property.



      <TreeView ItemsSource="{Binding Documents}">
      <TreeView.ItemContainerStyle>
      <Style TargetType="TreeViewItem">
      <Setter Property="IsExpanded" Value="True" />
      <Setter Property="IsSelected" Value="{Binding selected}" />
      </Style>
      </TreeView.ItemContainerStyle>

      <TreeView.ItemTemplate>
      <HierarchicalDataTemplate ItemsSource="{Binding descriptions}">
      <HierarchicalDataTemplate.ItemContainerStyle>
      <Style TargetType="TreeViewItem">
      <Setter Property="IsSelected" Value="{Binding selected}" />
      </Style>
      </HierarchicalDataTemplate.ItemContainerStyle>
      <HierarchicalDataTemplate.ItemTemplate>
      <DataTemplate>
      <StackPanel Orientation="Horizontal">
      <TextBlock Text="{Binding name}" />
      </StackPanel>
      </DataTemplate>
      </HierarchicalDataTemplate.ItemTemplate>
      <TextBlock Text="{Binding name}" />
      </StackPanel>
      </HierarchicalDataTemplate>
      </TreeView.ItemTemplate>
      </TreeView>


      The VM objects look like this:



      public class DocumentVM : ObservableObject
      {
      private string _name;
      public string name
      {
      get { return _name; }
      set { Set(ref _name, value); }
      }

      private bool _selected = false;
      public bool selected
      {
      get { return _selected; }
      set { Set(ref _selected, value); }
      }
      }


      DescriptionVM is very similar.



      So for example, if I run the following two lines:



      MyVM.Documents[1].descriptions[0].selected = true;
      MyVM.Documents[1].selected = true;


      First line sets first child of second document to selected, whereas the second line sets first document node to select, but sets first child of second document to unselected. I'm sure this is something wrong with the DataTemplates I'm using there, but can't figure out what that is.







      wpf mvvm treeview datatemplate






      share|improve this question















      share|improve this question













      share|improve this question




      share|improve this question








      edited Nov 16 '18 at 14:12







      dotNET

















      asked Nov 16 '18 at 14:02









      dotNETdotNET

      18.3k1387150




      18.3k1387150
























          1 Answer
          1






          active

          oldest

          votes


















          0














          By default, the WPF TreeView doesn't support multiple selection, so the second select will automatically unselect the first item.



          There are ways to handle this - look at this answer.






          share|improve this answer
























          • aaaaaah. Why in the world this didn't occur to me? Thanks a lot.

            – dotNET
            Nov 16 '18 at 15:07












          Your Answer






          StackExchange.ifUsing("editor", function () {
          StackExchange.using("externalEditor", function () {
          StackExchange.using("snippets", function () {
          StackExchange.snippets.init();
          });
          });
          }, "code-snippets");

          StackExchange.ready(function() {
          var channelOptions = {
          tags: "".split(" "),
          id: "1"
          };
          initTagRenderer("".split(" "), "".split(" "), channelOptions);

          StackExchange.using("externalEditor", function() {
          // Have to fire editor after snippets, if snippets enabled
          if (StackExchange.settings.snippets.snippetsEnabled) {
          StackExchange.using("snippets", function() {
          createEditor();
          });
          }
          else {
          createEditor();
          }
          });

          function createEditor() {
          StackExchange.prepareEditor({
          heartbeatType: 'answer',
          autoActivateHeartbeat: false,
          convertImagesToLinks: true,
          noModals: true,
          showLowRepImageUploadWarning: true,
          reputationToPostImages: 10,
          bindNavPrevention: true,
          postfix: "",
          imageUploader: {
          brandingHtml: "Powered by u003ca class="icon-imgur-white" href="https://imgur.com/"u003eu003c/au003e",
          contentPolicyHtml: "User contributions licensed under u003ca href="https://creativecommons.org/licenses/by-sa/3.0/"u003ecc by-sa 3.0 with attribution requiredu003c/au003e u003ca href="https://stackoverflow.com/legal/content-policy"u003e(content policy)u003c/au003e",
          allowUrls: true
          },
          onDemand: true,
          discardSelector: ".discard-answer"
          ,immediatelyShowMarkdownHelp:true
          });


          }
          });














          draft saved

          draft discarded


















          StackExchange.ready(
          function () {
          StackExchange.openid.initPostLogin('.new-post-login', 'https%3a%2f%2fstackoverflow.com%2fquestions%2f53339349%2ftreeview-child-nodes-vm-being-affected-by-parent-selection%23new-answer', 'question_page');
          }
          );

          Post as a guest















          Required, but never shown

























          1 Answer
          1






          active

          oldest

          votes








          1 Answer
          1






          active

          oldest

          votes









          active

          oldest

          votes






          active

          oldest

          votes









          0














          By default, the WPF TreeView doesn't support multiple selection, so the second select will automatically unselect the first item.



          There are ways to handle this - look at this answer.






          share|improve this answer
























          • aaaaaah. Why in the world this didn't occur to me? Thanks a lot.

            – dotNET
            Nov 16 '18 at 15:07
















          0














          By default, the WPF TreeView doesn't support multiple selection, so the second select will automatically unselect the first item.



          There are ways to handle this - look at this answer.






          share|improve this answer
























          • aaaaaah. Why in the world this didn't occur to me? Thanks a lot.

            – dotNET
            Nov 16 '18 at 15:07














          0












          0








          0







          By default, the WPF TreeView doesn't support multiple selection, so the second select will automatically unselect the first item.



          There are ways to handle this - look at this answer.






          share|improve this answer













          By default, the WPF TreeView doesn't support multiple selection, so the second select will automatically unselect the first item.



          There are ways to handle this - look at this answer.







          share|improve this answer












          share|improve this answer



          share|improve this answer










          answered Nov 16 '18 at 14:49









          PeregrinePeregrine

          2,41021230




          2,41021230













          • aaaaaah. Why in the world this didn't occur to me? Thanks a lot.

            – dotNET
            Nov 16 '18 at 15:07



















          • aaaaaah. Why in the world this didn't occur to me? Thanks a lot.

            – dotNET
            Nov 16 '18 at 15:07

















          aaaaaah. Why in the world this didn't occur to me? Thanks a lot.

          – dotNET
          Nov 16 '18 at 15:07





          aaaaaah. Why in the world this didn't occur to me? Thanks a lot.

          – dotNET
          Nov 16 '18 at 15:07




















          draft saved

          draft discarded




















































          Thanks for contributing an answer to Stack Overflow!


          • Please be sure to answer the question. Provide details and share your research!

          But avoid



          • Asking for help, clarification, or responding to other answers.

          • Making statements based on opinion; back them up with references or personal experience.


          To learn more, see our tips on writing great answers.




          draft saved


          draft discarded














          StackExchange.ready(
          function () {
          StackExchange.openid.initPostLogin('.new-post-login', 'https%3a%2f%2fstackoverflow.com%2fquestions%2f53339349%2ftreeview-child-nodes-vm-being-affected-by-parent-selection%23new-answer', 'question_page');
          }
          );

          Post as a guest















          Required, but never shown





















































          Required, but never shown














          Required, but never shown












          Required, but never shown







          Required, but never shown

































          Required, but never shown














          Required, but never shown












          Required, but never shown







          Required, but never shown







          Popular posts from this blog

          Bressuire

          Vorschmack

          Quarantine