我的XAML如下。我有一个主ViewModel,它有一个项目列表,我想在这个列表中显示一个属性
<ItemsControl ItemsSource="{Binding MyList}">
<ItemsControl.ItemTemplate>
<DataTemplate>
<Label Content="{Binding MyName, RelativeSource={RelativeSource AncestorType={x:Type ItemsControl}}}"></Label>
</DataTemplate>
</ItemsControl.ItemTemplate>
</ItemsControl>
问题是MyName总是空白,尽管我的列表有两个项目。
主VM类下面有这个属性,我在构造函数
中添加了项目public ObservableCollection<InnerViewModel> MyList { get; set; }
我的内心虚拟机
public class InnerViewModel
{
private string _MyName;
public string MyName
{
get
{
return _MyName;
}
set
{
_MyName = value;
OnPropertyChanged("MyName");
}
}
我确实已经安装了OnPropertyChanged,但为了简单起见,我没有在这里粘贴它。我认为问题在于XAML,但我不确定。如何将属性MyName显示在视图中的项目列表中?
答案 0 :(得分:3)
由于您使用MyList
作为ItemsSource
,因此子元素的数据源将为MyList
。所以你不需要使用RelativeSource。
换句话说,这应该有效:
<ItemsControl ItemsSource="{Binding MyList}">
<ItemsControl.ItemTemplate>
<DataTemplate>
<Label Content="{Binding MyName}"></Label>
</DataTemplate>
</ItemsControl.ItemTemplate>
</ItemsControl>
答案 1 :(得分:2)
尝试并删除绑定的相对源部分。
<DataTemplate>
<Label Content="{Binding MyName}"></Label>
</DataTemplate>