将 UserControl ListBox ItemSsource 绑定到父 DataContext 时出错
Posted
技术标签:
【中文标题】将 UserControl ListBox ItemSsource 绑定到父 DataContext 时出错【英文标题】:Error on binding UserControl's ListBox's ItemSource to parent DataContext 【发布时间】:2015-08-24 22:28:08 【问题描述】:我正在尝试将 UserControl 的 ListBox 绑定到父 ViewModel 的公共列表。 这里我将DataContext设置为主窗口
public partial class MainWindow : Window
private ConfigurationListViewModel _ConfList = new ConfigurationListViewModel();
public MainWindow()
InitializeComponent();
DataContext = _ConfList.ConfList;
班级是:
public class ConfigurationListViewModel
public ConfigurationList ConfList = new ConfigurationList();
public class ConfigurationList
public List<string> Test = new List<string>();
public ConfigurationList()
Test.Add("aaa");
Test.Add("bbb");
Test.Add("ccc");
在主窗口 XAML 中,我设置了用户控件:
<GroupBox Header="Configurations" >
<local:ConfigurationMng x:Name="ConfigMng"/>
</GroupBox>
在 ConfigurationMng 中,我有以下 ListBox,我正在尝试将其绑定到列表“Test”。
<ListBox Name="lbConfigurationList" ItemsSource="Binding Test">
由于MainWindow有_ConfList.ConfList
的DataContext,我认为ListBox有List“Test”的范围;
但使用记录器我得到以下输出:
System.Windows.Data Error: 40 : BindingExpression path error: 'Test' property not found on 'object' ''ConfigurationList' (HashCode=43536272)'. BindingExpression:Path=Test; DataItem='ConfigurationList' (HashCode=43536272); target element is 'ListBox' (Name='lbConfigurationList'); target property is 'ItemsSource' (type 'IEnumerable')
但我不明白这背后有什么错误。
我错过了什么?
【问题讨论】:
【参考方案1】:ConfigurationList
类中的Test
不是属性,而是字段。您只能绑定到公共属性。
只需将初始化行改为:
public List<String> Test get; set; = new List<string>();
请注意,自动属性初始化器是 C# 6 中的新功能。如果您使用的是该语言的早期版本,则必须使用支持字段或在构造函数中设置它。
【讨论】:
以上是关于将 UserControl ListBox ItemSsource 绑定到父 DataContext 时出错的主要内容,如果未能解决你的问题,请参考以下文章
实现点击Form区域内除ListBox以外的其他地方,实现ListBox的隐藏,包括UserControl范围内,也包括UserControl之外Form之内