我有一个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将保持空白。这是为什么?
答案 0 :(得分:2)
因此,您的ComboBox
位于NoticeWindow
内,其中DataContext
设置为自己。
这也是您定义Titles
属性的位置。
与@AirL指出的一样,Titles
应标记为Public
:
public ObservableCollection<TITLE> Titles { get; set; }
此外,无需在DataContext
上定义ComboBox
,也无需说明TitleCombo.ItemsSource = Titles;
由于ComboBox
从DataContext
继承了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
。
您用作绑定的绑定源属性的属性必须 是你班级的公共财产。明确定义的接口 无法访问属性用于绑定目的,也不能保护, 没有基础的私有,内部或虚拟属性 实施