我在ComboBox上的数据绑定有什么问题?

时间:2013-10-16 06:39:07

标签: c# wpf data-binding combobox wpf-controls

我有一个ComboBox标记为:

<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将保持空白。这是为什么?

2 个答案:

答案 0 :(得分:2)

因此,您的ComboBox位于NoticeWindow内,其中DataContext设置为自己。 这也是您定义Titles属性的位置。

与@AirL指出的一样,Titles应标记为Public

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

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

由于ComboBoxDataContext继承了NoticeWindow。您可以将其绑定到Titles属性

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

答案 1 :(得分:0)

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

鉴于WPF数据绑定仅适用于公共属性(请参阅MSDN related documentation),它可以解释为什么绑定无法正常工作,并且您需要在代码中明确设置ItemsSource以填充您的ComboBox

  

您用作绑定的绑定源属性的属性必须   是你班级的公共财产。明确定义的接口   无法访问属性用于绑定目的,也不能保护,   没有基础的私有,内部或虚拟属性   实施