You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

WPF中AutoCompleteBehavior绑定TestItems提示无DataContext如何解决

修复方案

报错根本原因

WPF的{Binding}默认会沿元素树向上查找控件的DataContext属性作为绑定源,你的TestItems是MainWindow类本身的属性,但你没有指定绑定源,也没有给窗口设置DataContext,因此绑定引擎找不到目标属性。

可选修复方法

方法1:设置窗口自身为DataContext(最适合当前测试场景)

直接在主窗口构造函数的InitializeComponent后添加代码,将窗口自身设为DataContext,同时记得初始化TestItems实例,否则即使绑定成功也没有数据:

public MainWindow()
{
    InitializeComponent();
    // 新增以下两行
    this.DataContext = this;
    TestItems = new ObservableCollection<string>{"测试项1", "测试项2", "SQL关键词1"};

    SQLText.TextChanged += SQLTextTextChanged;
    CreateInitialTree();
}

方法2:XAML绑定指定源(无需修改后台DataContext)

如果你不想修改窗口的DataContext,可以直接在绑定语句里指定源为当前窗口,两种写法选一种即可:

  1. 用RelativeSource查找父级窗口:
behaviors:AutoCompleteBehavior.AutoCompleteItemsSource="{Binding TestItems, RelativeSource={RelativeSource FindAncestor, AncestorType={x:Type local:MainWindow}}}"
  1. 先给窗口设置x:Name="RootWin",再用ElementName绑定:
<!-- 窗口标签加name属性 -->
<Window x:Class="你的命名空间.MainWindow"
        x:Name="RootWin"
        ...其余属性>

<!-- TextBox绑定修改为 -->
behaviors:AutoCompleteBehavior.AutoCompleteItemsSource="{Binding TestItems, ElementName=RootWin}"

注意事项

如果后续需要动态替换TestItems的整个实例(不是增删集合内元素),需要让MainWindow实现INotifyPropertyChanged接口,在TestItems的setter中触发属性变更通知,否则UI不会感知到集合实例的变更。


内容的提问来源于stack exchange,提问作者user9922446

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.02 03:24:01