Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/258.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# wpf TreeViewItem绑定的IsSelected属性无法以编程方式工作_C#_Mvvm_Treeview - Fatal编程技术网

C# wpf TreeViewItem绑定的IsSelected属性无法以编程方式工作

C# wpf TreeViewItem绑定的IsSelected属性无法以编程方式工作,c#,mvvm,treeview,C#,Mvvm,Treeview,我正在使用MVVM绑定到树。我是以一种相当标准的方式进行此操作的,即树中的每个节点对象都支持ITreeNode接口: public interface ITreeNode { bool IsExpanded { get; set; } bool IsSelected { get; set; } ObservableCollection<ITreeNode> Children { get; } ITreeNode Parent { get; set;

我正在使用MVVM绑定到树。我是以一种相当标准的方式进行此操作的,即树中的每个节点对象都支持ITreeNode接口:

public interface ITreeNode
{
    bool IsExpanded { get; set; }
    bool IsSelected { get; set; }

    ObservableCollection<ITreeNode> Children { get; }

    ITreeNode Parent { get; set; }

    string Name {get;}
}
xaml定义了一个简单的层次结构数据模板:

<TreeView.ItemTemplate>
    <HierarchicalDataTemplate ItemsSource="{Binding Children}">
        <TextBlock Text="{Binding Name}" />
    </HierarchicalDataTemplate>
</TreeView.ItemTemplate>
然后我定义了一个ItemContainerStyle来绑定IsExpanded和IsSelected属性

<TreeView.ItemContainerStyle>
    <Style TargetType="{x:Type TreeViewItem}">
        <Setter Property="IsExpanded" Value="{Binding IsExpanded, Mode=TwoWay}" />
        <Setter Property="IsSelected" Value="{Binding IsSelected, Mode=TwoWay}" />
        <Setter Property="FontWeight" Value="Normal" />
        <Style.Triggers>
            <Trigger Property="IsSelected" Value="True">
                <Setter Property="FontWeight" Value="Bold" />
            </Trigger>
        </Style.Triggers>
    </Style>
</TreeView.ItemContainerStyle>
我的问题是,如果我以编程方式更改IsSelected属性,则树不会反映新的选择。如果我使用鼠标进行选择,那么IsSelected属性会很好地更新。我为IsSelected属性在setter中添加了一个事件,我可以看到,当我使用鼠标进行选择时,我正确地得到了对IsSelected setter的两个调用,第一个为false以取消选择现有项,第二个为True以取消选择新选择的节点。当我以编程方式执行时,我只得到一个调用,它将值设置为true。我已经尝试手动将旧节点设置为false,但这没有任何区别

IsExpanded属性工作正常。事实上,如果我尝试选择一个向下几层的节点,则展开所有父节点以便可以看到该节点的调用都可以正常工作,但是,实际节点没有被选中

我已经读了十几遍代码,看起来很好,这里会发生什么


谢谢

向我们展示您的ITreeNode的具体实现。这个问题已经解决了,代码没有改变!经过数小时的查找,我开始在VisualStudio中遇到问题,所以我清理了项目,删除了缓存的obj文件并重新启动了VS,然后它工作得很好!