我有一个ObservableCollection,我想绑定到我的列表框......
lbRosterList.ItemsSource = App.ViewModel.rosterItemsCollection;
然而,在该系列中,我还有另一个系列:
[DataMember]
public ObservableCollection<PersonDetail> ContactInfo
{
get
{
return _ContactInfo;
}
set
{
if (value != _ContactInfo)
{
_ContactInfo = value;
NotifyPropertyChanged("ContactInfo");
}
}
}
PersonDetail包含2个属性: 名称和电子邮件
我希望列表框中包含rosterItemsCollection
中每个项目的值RosterId = 0;
RosterName = "test";
ContactInfo.name = "Art";
ContactInfo.email = "art@something.com";
RosterId = 0;
RosterName = "test"
ContactInfo.name = "bob";
ContactInfo.email = "bob@something.com";
RosterId = 1;
RosterName = "test1"
ContactInfo.name = "chris";
ContactInfo.email = "chris@something.com";
RosterId = 1;
RosterName = "test1"
ContactInfo.name = "Sam";
ContactInfo.email = "sam@something.com";
我希望这些列表框能够显示ContactInfo信息。
我希望这是有道理的......
我尝试过的XAML收效甚微:
<listbox x:Name="lbRosterList" ItemsSource="rosterItemCollection">
<textblock x:name="itemText" text="{Binding Path=name}"/>
我做错了什么?
答案 0 :(得分:4)
将您的绑定路径更改为:
<ListBox x:Name="lbRosterList" DataContext="{Binding}" ItemsSource="{Binding rosterItemCollection}">
<TextBlock x:Name="itemText" Text="{Binding Path=ContactInfo.name}"/>
然后在你的代码中执行此操作(在页面构造函数中的InitializeComponents之后):
lbRosterList.DataContext = App.ViewModel;
Charles Petzold在free book中对此类事物的极好参考:第12章,第363页。
您还可以从列表框中删除DataContext
属性,并设置页面本身的DataContext
。如果您创建一个新的数据绑定应用程序,您将看到我们的默认示例。