【问题标题】:Binding error from the treeview control来自树视图控件的绑定错误
【发布时间】:2013-09-14 15:03:11
【问题描述】:

我遇到了一个问题,如果您能为此提供任何建议,我将不胜感激。

错误信息:

System.Windows.Data 错误:4:找不到绑定源 参考'RelativeSource FindAncestor, AncestorType='System.Windows.Controls.ItemsControl', 祖先级别='1''。 BindingExpression:Path=Horizo​​ntalContentAlignment; 数据项=空;目标元素是'TreeViewItem'(名称='');目标 属性是“Horizo​​ntalContentAlignment”(类型“Horizo​​ntalAlignment”)

我有一个树视图控件(C# WPF .NET 4.0),通过使用 xaml 中的数据模板或手动将几个项目添加到此树视图中,并且都使用数据绑定。

当收到新的数据结构时,我需要清理树视图中的所有项目并通过treeview_Control.Items.Clear() 重新生成新的项目,从 GUI 的角度来看它似乎工作正常,但是当我在 Visual Studio 上看到输出窗口时,它显示了几个错误消息如上。

我试图寻找解决方案并尝试了几种方法,但还没有成功。刚刚有人建议忽略此错误消息,但我真的很想清除它。

如果你有任何想法,请帮助我。

【问题讨论】:

  • 你能分享你的 xaml 和 viewmodel/codebehind 吗?

标签: c# wpf binding treeview


【解决方案1】:

对不起,这是一条评论,但我无法进入评论部分

您能否尝试在 TreeView 上添加 ItemContainerStyle 并查看它是否修复了错误,我们在 ListView 中遇到了同样的问题,这是我们可以找到的唯一解决方法来消除错误。

<TreeView.ItemContainerStyle>
    <Style TargetType="{x:Type TreeViewItem}">
        <Setter Property="HorizontalContentAlignment" Value="Left"/>
        <Setter Property="VerticalContentAlignment" Value="Center"/>
    </Style>
</TreeView.ItemContainerStyle>

【讨论】:

  • 我得到了同样的结果。 ItemContainerStyle 的这个添加对我来说根本没有区别。 (我对此并不完全不满意。我真的不想在我的代码中再有这样的 XAML 变通方法黑客攻击......)
【解决方案2】:

我遇到了同样的问题。当我通过 ViewModel 从树视图中删除项目时,我收到了同样无害的错误消息。 我在 UserControl.Resources 中为 TreeViewItem 定义了样式。 在这种风格中,还有内容对齐的设置器。

<Style TargetType="TreeViewItem" x:Key="myTreeViewItemStyle"
             BasedOn="{StaticResource {x:Type TreeViewItem}}">
            <Setter Property="HorizontalContentAlignment"
                    Value="Left" />
            <Setter Property="VerticalContentAlignment" Value="Center"/>
    ...</Style>

对我有帮助的是在 TreeView 中添加 ItemContainerStyle 参考。

<TreeView ItemsSource="{Binding Items}" ItemContainerStyle="{StaticResource ResourceKey=myTreeViewItemStyle}">

【讨论】:

  • 这对我也不起作用。我将不得不继续忽略这些错误消息。
【解决方案3】:

我终于找到了适合我的解决方案。我首先在我的 App.xaml 中添加了一个全局样式:

<Style TargetType="{x:Type TreeViewItem}">
    <Setter Property="HorizontalContentAlignment" Value="Left" />
    <Setter Property="VerticalContentAlignment" Value="Top" />
</Style>

我还必须将以下内容添加到我的 TreeView:

<TreeView.ItemContainerStyle>
    <Style
        BasedOn="{StaticResource {x:Type TreeViewItem}}"
        TargetType="{x:Type TreeViewItem}">         
    </Style>
</TreeView.ItemContainerStyle>

由于某种原因,在我的案例中,BasedOn 属性是缺失的部分。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-02-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多