WPF TreeView IsSelected绑定引发空引用异常
我有一个tabcontrol,它绑定到视图模型中的选项卡集合。现在有两种标签,其中一种有树状视图。第一次创建选项卡时,treeview选择将起作用。当我切换选项卡并返回到包含treeview的选项卡时,treeview项似乎变得未绑定。当我尝试选择一个时,会出现以下错误: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;
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切换到双向模式没有任何区别。啊啊啊啊啊啊啊啊。你那里有干劲剂吗?塞特呢?你有那两个吗?