0

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

4

2 回答 2

2

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

就像@AirL 指出的那样,Titles应该标记为Public

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

此外,不需要DataContextComboBoxnor上定义 aTitleCombo.ItemsSource = Titles;

由于ComboBox继承DataContextNoticeWindow. 您可以将其绑定到Titles属性

<ComboBox x:Name="TitleCombo"
        Width="100" 
        Height="20"
        DisplayMemberPath="TITLE_NAME"     
        SelectedValuePath="TITLE_CODEID"     
        ItemsSource="{Binding Titles}" />
于 2013-10-16T06:50:13.213 回答
0

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

鉴于 WPF 数据绑定仅适用于公共属性(请参阅MSDN 相关文档),它可以解释为什么您的绑定无法正常工作,并且您需要显式设置您的ItemsSourcein 代码以填充您的ComboBox.

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

于 2013-10-16T11:06:59.720 回答