Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/wpf/12.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
WPF TreeView IsSelected绑定引发空引用异常_Wpf_Binding_Treeview_Runtime Error_Tabcontrol - Fatal编程技术网

WPF TreeView IsSelected绑定引发空引用异常

WPF TreeView IsSelected绑定引发空引用异常,wpf,binding,treeview,runtime-error,tabcontrol,Wpf,Binding,Treeview,Runtime Error,Tabcontrol,我有一个tabcontrol,它绑定到视图模型中的选项卡集合。现在有两种标签,其中一种有树状视图。第一次创建选项卡时,treeview选择将起作用。当我切换选项卡并返回到包含treeview的选项卡时,treeview项似乎变得未绑定。当我尝试选择一个时,会出现以下错误: System.Windows.Data Error: 8 : Cannot save value from target back to source. BindingExpression:Path=IsSelected;

我有一个tabcontrol,它绑定到视图模型中的选项卡集合。现在有两种标签,其中一种有树状视图。第一次创建选项卡时,treeview选择将起作用。当我切换选项卡并返回到包含treeview的选项卡时,treeview项似乎变得未绑定。当我尝试选择一个时,会出现以下错误:

System.Windows.Data Error: 8 : Cannot save value from target back to source. 
BindingExpression:Path=IsSelected; DataItem='NavigationItem' (HashCode=50956576);
target element is 'TreeViewItem' (Name=''); target property is 'IsSelected' (type
'Boolean') NullReferenceException:'System.NullReferenceException: 
Object reference not set to an instance of an object.
at System.ComponentModel.ReflectPropertyDescriptor.SetValue(
Object component, Object  value)
at MS.Internal.Data.PropertyPathWorker.SetValue(Object item, Object value)
at MS.Internal.Data.ClrBindingWorker.UpdateValue(Object value)
at System.Windows.Data.BindingExpression.UpdateSource(Object value)'
我不知道为什么会发生这种情况。当通过应用程序进行调试时,我的模型仍然拥有所有正确的数据,treeview甚至显示了来自模型的信息,这意味着在最初更改选项卡时必须正确绑定模型。这只是当我离开标签并返回后尝试选择一个项目时。以下是我的选项卡控件和有问题的选项卡的源代码,其中包含一个树状视图:

<TabControl ItemsSource="{Binding Tabs}">
        <TabControl.ItemTemplate>
            ...
        </TabControl.ItemTemplate>
        <TabControl.ItemContainerStyle>
            <Style TargetType="{x:Type TabItem}">
                <Setter Property="IsSelected" Value="{Binding IsSelected, Mode=TwoWay}"/>
            </Style>
        </TabControl.ItemContainerStyle>
        <TabControl.ContentTemplate>
            <DataTemplate>
                <ContentControl Content="{Binding}">
                    <ContentControl.Resources>
                        <DataTemplate DataType="{x:Type tabs:ArchitectureTabViewModel}">
                            <views:ArchitectureTab/>
                        </DataTemplate>
                        <DataTemplate DataType="{x:Type tabs:TestOrderTabViewModel}">
                            <views:TestOrderTab/>
                        </DataTemplate>
                    </ContentControl.Resources>
                </ContentControl>
            </DataTemplate>
        </TabControl.ContentTemplate>
    </TabControl>
以及有关的标签:

<Grid DataContext="{Binding GraphNavigationModel}">
    ...
        <TreeView ItemsSource="{Binding NavigationTree}" Background="#00ffffff" Margin="5" BorderThickness="0" MinWidth="200">
            <TreeView.ItemTemplate>
                <HierarchicalDataTemplate ItemsSource="{Binding Children}">
                    <TextBlock Text="{Binding Text}">
                    </TextBlock>
                </HierarchicalDataTemplate>
            </TreeView.ItemTemplate>
            <TreeView.ItemContainerStyle>
                <Style TargetType="{x:Type TreeViewItem}">
                    <Setter Property="IsSelected" Value="{Binding IsSelected, Mode=OneWayToSource}"/>
                </Style>
            </TreeView.ItemContainerStyle>
        </TreeView>
    </Grid>
</Grid>

NavigationItem类或NavigationTree集合中的任何类型是否具有IsSelected属性?该问题是由OneWayToSource绑定引起的。将setter中的绑定更改为双向模式,就可以了。TreeView和OneWayToSource绑定彼此不喜欢。@Sheridan NavigationItem类确实具有IsSelected属性。@devhedgehog切换到双向模式没有任何区别。啊啊啊啊啊啊啊啊。你那里有干劲剂吗?塞特呢?你有那两个吗?