我在组合框上的数据绑定有什么问题
本文关键字:数据绑定 什么 问题 组合 | 更新日期: 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;
由于ComboBox
从NoticeWindow
继承了其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
。
用作绑定的绑定源属性的属性必须 是类的公共属性。显式定义的接口 不能出于绑定目的访问属性,也不能保护, 没有基础的私有、内部或虚拟属性 实现。