我在组合框上的数据绑定有什么问题

本文关键字:数据绑定 什么 问题 组合 | 更新日期: 2023-09-27 18:35:38

我有一个组合框标记为:

<ComboBox x:Name="TitleCombo"
            Width="100" 
            Height="20"
            DisplayMemberPath="TITLE_NAME"     
            SelectedValuePath="TITLE_CODEID"     
            DataContext="{Binding}"
            ItemsSource="{Binding Path=Titles}" />

它是NoticeWindow.xaml上的唯一控件,具有以下代码隐藏:

public partial class NoticeWindow : Window
{
    private readonly Xt900Context _dbContext = new Xt900Context();
    public NoticeWindow()
    {
        InitializeComponent();
        var tits = _dbContext.TITLEs.ToList();
        Titles = new ObservableCollection<TITLE>(tits);
        DataContext = this;
        TitleCombo.ItemsSource = Titles;
    }
    ObservableCollection<TITLE> Titles { get; set; }
}

如果没有 TitleCombo.ItemsSource = Titles 语句,组合框将保持空白。这是为什么呢?

我在组合框上的数据绑定有什么问题

所以,你的ComboBox在里面 NoticeWindow ,它DataContext设置为他自己。这也是您定义 Titles 属性的位置。

正如@AirL指出的那样,Titles应该标记为Public

public ObservableCollection<TITLE> Titles { get; set; }

此外,无需在ComboBox上定义DataContext,也无需说明TitleCombo.ItemsSource = Titles;

由于ComboBoxNoticeWindow继承了其DataContext.您可以将其绑定到Titles属性

<ComboBox x:Name="TitleCombo"
        Width="100" 
        Height="20"
        DisplayMemberPath="TITLE_NAME"     
        SelectedValuePath="TITLE_CODEID"     
        ItemsSource="{Binding Titles}" />
在您

提供给我们的代码中,您的ObservableCollection<TITLE> Titles { get; set; }被定义为private(未定义访问修饰符,private默认修饰符)。

鉴于 WPF 数据绑定仅适用于公共属性(请参阅 MSDN 相关文档),它可以解释绑定无法正常工作的原因,以及需要在代码隐藏中显式设置ItemsSource以填充ComboBox

用作绑定的绑定源属性的属性必须 是类的公共属性。显式定义的接口 不能出于绑定目的访问属性,也不能保护, 没有基础的私有、内部或虚拟属性 实现。