相关疑难解决方法(0)

WPF MVVM TreeView SelectedItem

这不可能是这么困难.WPF中的TreeView不允许您设置SelectedItem,表示该属性是ReadOnly.我有TreeView填充,甚至在数据绑定集合更改时更新.

我只需要知道选择了什么项目.我正在使用MVVM,因此没有代码隐藏或变量来引用树视图.这是我找到的唯一解决方案,但它是一个明显的黑客,它在XAML中创建了另一个元素,它使用ElementName绑定将自己设置为树视图选定项,然后您必须绑定Viewmodel.关于此问题还有其他几个问题,但没有给出其他有效的解决方案.

我已经看到了这个问题,但是使用给出的答案给出了编译错误,由于某种原因,我无法将混合sdk System.Windows.Interactivity的引用添加到我的项目中.它说"未知的错误系统.窗口没有被预加载",我还没有想出如何通过它.

对于奖励积分:为什么微软会让这个元素的SelectedItem属性ReadOnly?

wpf treeview mvvm

31
推荐指数
4
解决办法
6万
查看次数

使用MVVM获取选定的TreeViewItem

所以有人建议使用WPF TreeView,我想:"是的,这似乎是正确的方法." 现在,几个小时后,我简直无法相信使用这个控件有多困难.通过一系列研究,我能够使TreeView`控件正常工作,但我找不到"正确"的方法来将所选项目添加到视图模型中.我不需要从代码中设置所选项目; 我只需要我的视图模型就可以知道用户选择了哪个项目.

到目前为止,我有这个XAML,它本身不是很直观.这都在UserControl.Resources标记内:

<CollectionViewSource x:Key="cvs" Source="{Binding ApplicationServers}">
    <CollectionViewSource.GroupDescriptions>
        <PropertyGroupDescription PropertyName="DeploymentEnvironment"/>
    </CollectionViewSource.GroupDescriptions>
</CollectionViewSource>

<!-- Our leaf nodes (server names) -->
<DataTemplate x:Key="serverTemplate">
    <TextBlock Text="{Binding Path=Name}"/>
</DataTemplate>

<!-- Note: The Items path refers to the items in the CollectionViewSource group (our servers).
           The Name path refers to the group name. -->
<HierarchicalDataTemplate x:Key="categoryTemplate"
                          ItemsSource="{Binding Path=Items}"
                          ItemTemplate="{StaticResource serverTemplate}">
    <TextBlock Text="{Binding Path=Name}" FontWeight="Bold"/>
</HierarchicalDataTemplate>
Run Code Online (Sandbox Code Playgroud)

这是树视图:

<TreeView DockPanel.Dock="Bottom" ItemsSource="{Binding Source={StaticResource cvs}, Path=Groups}"
              ItemTemplate="{StaticResource categoryTemplate}">
            <Style TargetType="TreeViewItem">
                <Setter Property="IsSelected" Value="{Binding Path=IsSelected}"/>
            </Style>
        </TreeView> …
Run Code Online (Sandbox Code Playgroud)

wpf treeview selecteditem mvvm

16
推荐指数
2
解决办法
3万
查看次数

获取TreeView中所选项的TreeViewItem

我有一个TreeView绑定到具有父子关系的数据集.我将如何从TreeView获取seleted TreeViewItem?请帮我.我的代码如下.

XAML: -

<TreeView Name="tvPersonal"  Background="Transparent"  ItemsSource="{Binding RootNodes}" SelectedItemChanged="tvPersonal_SelectedItemChanged">    
 <TreeView.ItemTemplate>
   <HierarchicalDataTemplate ItemsSource="{Binding rsParentChild}">
     <TextBlock Text="{Binding Name}" />
   </HierarchicalDataTemplate>
 </TreeView.ItemTemplate>
Run Code Online (Sandbox Code Playgroud)

 public MainWindow()   

        {    
            InitializeComponent();    
            DataSet ds = new BL.BLMenu().GetAllMenues(new BOModule { Name = Modules.Personnel });
            ds.Tables[0].TableName = "Menu";
            DataRelation relation = new DataRelation("rsParentChild",
                    ds.Tables["Menu"].Columns["MenuId"],
                    ds.Tables["Menu"].Columns["ParentId"]);
            relation.Nested = true;    
            ds.Relations.Add(relation);
            BOMenu mnu = new BOMenu();    
            BOMenu.RootNodes = ds.Tables["Menu"].DefaultView;
            BOMenu.RootNodes.RowFilter = "ParentId IS NULL";    

            this.DataContext = this;
            stbiDate.Content = DateTime.Now;

        }
        public DataView RootNodes    
        {
            get { return BOMenu.RootNodes; }
        }
Run Code Online (Sandbox Code Playgroud)

BOMenu类: …

c# wpf

14
推荐指数
3
解决办法
3万
查看次数

在HierarchicalDataTemplate应用的WPF TreeView中绑定SelectedItem

我有一个数据绑定TreeView,我想绑定SelectedItem.这种附加的行为工作完全没有HierarchicalDataTemplate,但与它连接的行为只能单向(UI数据)不是别的,因为现在e.NewValueMyViewModel不是TreeViewItem.

这是附加行为的代码段:

private static void OnSelectedItemChanged(DependencyObject sender, DependencyPropertyChangedEventArgs e)
{
    var item = e.NewValue as TreeViewItem;
    if (item != null)
    {
        item.SetValue(TreeViewItem.IsSelectedProperty, true);
    }
}
Run Code Online (Sandbox Code Playgroud)

这是我的TreeView定义:

<Window xmlns:interactivity="clr-namespace:System.Windows.Interactivity;assembly=System.Windows.Interactivity">
    <TreeView ItemsSource="{Binding MyItems}" VirtualizingStackPanel.IsVirtualizing="True">
        <interactivity:Interaction.Behaviors>
            <behaviors:TreeViewSelectedItemBindingBehavior SelectedItem="{Binding SelectedItem, Mode=TwoWay}" />
        </interactivity:Interaction.Behaviors>
        <TreeView.Resources>
            <HierarchicalDataTemplate DataType="{x:Type local:MyViewModel}" ItemsSource="{Binding Children}">
                <TextBlock Text="{Binding Name}"/>
            </HierarchicalDataTemplate>
        </TreeView.Resources>
    </TreeView>
</Window>
Run Code Online (Sandbox Code Playgroud)

如果我可以获得TreeView对附加行为方法的引用OnSelectedItemChanged,也许我可以使用此问题中的答案来获取TreeViewItem但我不知道如何到达那里.有谁知道如何以及它是正确的方式去?

data-binding wpf treeview hierarchicaldatatemplate treeviewitem

13
推荐指数
1
解决办法
9301
查看次数

WPF:绑定到ICommand的TreeViewItem

我正忙着在WPF中创建我的第一个MVVM应用程序.

基本上我遇到的问题是我有一个TreeView(System.Windows.Controls.TreeView),我放在我的WPF窗口,我已经决定将绑定到CommandViewModel项的ReadOnlyCollection,这些项包括一个DisplayString,Tag和RelayCommand.

现在在XAML中,我有了TreeView,并且已成功将我的ReadOnlyCollection绑定到此.我可以查看这个,在UI中看起来一切都很好.

现在的问题是,我需要的RelayCommand到树型视图的命令绑定,但是从我所看到的TreeViewItem没有命令.这是否迫使我在IsSelected属性中甚至在TreeView_SelectedItemChanged方法后面的代码中执行此操作,还是有办法在WPF中神奇地执行此操作?

这是我的代码:

<TreeView BorderBrush="{x:Null}" 
      HorizontalAlignment="Stretch" 
      VerticalAlignment="Stretch">
<TreeView.Items>
    <TreeViewItem
        Header="New Commands"
        ItemsSource="{Binding Commands}"
        DisplayMemberPath="DisplayName"
        IsExpanded="True">
    </TreeViewItem>
</TreeView.Items>
Run Code Online (Sandbox Code Playgroud)

理想情况下,我很乐意去:

<TreeView BorderBrush="{x:Null}" 
      HorizontalAlignment="Stretch" 
      VerticalAlignment="Stretch">
<TreeView.Items>
    <TreeViewItem
        Header="New Trade"
        ItemsSource="{Binding Commands}"
        DisplayMemberPath="DisplayName"
        IsExpanded="True"
        Command="{Binding Path=Command}">
    </TreeViewItem>
</TreeView.Items>
Run Code Online (Sandbox Code Playgroud)

有人有一个解决方案,允许我使用我有的RelayCommand基础设施.

谢谢你们,非常感谢!

理查德

c# wpf treeview command icommand

9
推荐指数
1
解决办法
1万
查看次数

TreeView在View模型中同步到SelectedItem

我在WPF TreeView控件之上有一个ViewModel.我希望ViewModel能够从TreeView中设置和读取SelectedItem.但是,TreeView的SelectedItem属性不可绑定.

我能够在后面的代码中设置和获取所选项(使用ItemContainerGenerator和TreeViewItem.IsSelected = true)但这会导致后面的代码和ViewModel之间的一些丑陋的通信.

有人有一个干净的解决方案吗?

wpf treeview selecteditem viewmodel

8
推荐指数
1
解决办法
2743
查看次数

将TreeView选择绑定到ViewModel

所以我有一个看起来像这样的TreeView:

<TreeView   Name="elementTreeView"
                        ItemsSource="{Binding Elements}" 
                        Width="Auto"
                        SelectedValuePath="Path" />
Run Code Online (Sandbox Code Playgroud)

我还有一个TextBlock定义如下:

<TextBlock Text="{Binding ElementName=elementTreeView, Path=SelectedValue}" />
Run Code Online (Sandbox Code Playgroud)

我的ModelView非常基本,包含您期望的内容.我正在寻找的是一种将我的ViewModel中的属性绑定到SelectedValue的方法.现在,文本块显示我需要的内容.有没有简单的方法来绑定这个属性?

wpf binding

7
推荐指数
1
解决办法
7633
查看次数

如何绑定到WPF TreeView的SelectedItem属性?

我在这里调整了TreeView Control示例项目,以便与Entity Framework对象一起使用.它运行得很漂亮,但是像许多其他人一样,尝试更新基于ParentViewModels的SelectedItem更改的集合或属性时,我也无法弥合理解的差距.

我在MVVM工作,希望我的代码隐藏免受任何混乱.作为一个初学者,我喜欢实现PropertyChanged通知的清洁,但由于它们没有固定的"SelectedItem"属性来绑定TreeView,我无法像往常一样提升我的PropertyChanged事件ListBox.

我的ChildViewModel上也有一个SelectedItem属性(实际上成功捕获了isSelected = true的对象)(参见HB对这个问题的回答).我也有我的ParentViewModel这势必我的看法(见@马丁Liversage的职位类型ChildViewModel的的SelectedItem 这里).我不能让他们同步.

请帮助我了解如何将SelectedItemChildViewModel 的属性传递给我的ParentViewModel.我没有将我的TreeView绑定到a CollectionView,所以我无法获取CurrentItem视图集合.

我正在处理的viewmodel集合非常查询,所以我现在还没有包含任何代码.请让我知道清楚需要什么.

treeview selecteditem mvvm inotifypropertychanged selecteditemchanged

3
推荐指数
1
解决办法
1万
查看次数

从 TreeView 获取 SelectedItem?

有谁知道如何从 TreeView 获取 SelectedItem(不是标题)?
这是我的代码:

<TreeView Name="treeView1" DataContext="{Binding Path=PresentationsViewModel}" Grid.Column="1" >
    <TreeViewItem IsExpanded="True" Header="Objects-A-List" DisplayMemberPath="Name" ItemsSource="{Binding Path=MyItem.ListA}"></TreeViewItem>
    <TreeViewItem IsExpanded="True" Header="Objects-B-List" DisplayMemberPath="Name" ItemsSource="{Binding Path=MyItem.ListB}"></TreeViewItem>
    <TreeViewItem IsExpanded="True" Header="Objects-C-List" DisplayMemberPath="Name" ItemsSource="{Binding Path=MyItem.ListC}"></TreeViewItem>
</TreeView>
Run Code Online (Sandbox Code Playgroud)

请注意,有 3 个不同的列表,包含 3 个不同的对象类型。拥有以下内容对我有很大帮助:

public Object SelectedObject
{
    set { _selectedObject = value; RunMyMethod(); RaisePropertyChanged("SelectedObject"); }
}  
Run Code Online (Sandbox Code Playgroud)

c# wpf treeview xaml selecteditem

2
推荐指数
2
解决办法
3万
查看次数

在C#中按数字排序TreeViewItems列表

这个问题是对这个问题的跟进.我目前的总体目标是根据输入的值以数字升序添加到我的程序TreeViewItem(我的TreeViewItem运行时添加了子节点)header.

我收到使用一个答案ModelView,一个工具,我不是那么熟悉了,我也被告知,这可以通过使用来完成ListTreeViewItems.List由于我缺乏经验,我决定探索这个选项ModelView.

在我的研究,我了解到ListsTreeViewItems有一点不同,因为你真的不喜欢你可以在引用它们array.这使得他们更难以完成工作.我将解释我当前的方法并发布我的代码.请引导我朝着正确的方向前进,并提供编码解决方案的答案.我目前仍然坚持我的treeViewListAdd功能.我在评论中编写了伪代码,用于解释我要对该区域进行的操作.

*注意:我是TreeViewItem从一个单独的窗口添加到我的

现在我的添加TreeViewItem过程包括:

  1. 检查输入的项目是否为数字(DONE)
  2. if不是数字,break操作(DONE)
  3. else- 继续添加子项(DONE)
  4. 检查重复的孩子(DONE)
  5. if找到重复break操作(DONE)
  6. else- 继续(完成)
  7. 创建ListTreeViewItem (DONE -但没有实现)
  8. TreeViewItem为新子节点创建(DONE)
  9. TVI header是根据用户文字设置的textBox (DONE)
  10. 传递给尝试添加到List数字顺序的函数(问题区域)
  11. 添加排序ListTreeViewItem主窗口 …

c# sorting wpf list treeviewitem

1
推荐指数
1
解决办法
1370
查看次数