我有一个简单的ListView什么绑定到对象的(TaxonDescription)列表。
当我选择另一个TaxonDescription时,ListView的元素不会更新。
也许我需要NotifyPropertyChanged,但我到处都试过。
有我的课程。
在页面的代码隐藏中,我检查了ItemSource,它有正确的列表元素,只是没有更新到View。
<ListView ItemsSource="{Binding Descriptions}"
SelectedItem="{Binding ActualSelectedDescription, Mode=TwoWay}">
<ListView.ItemTemplate>
<DataTemplate>
<TextBlock Text="{Binding DescriptionName}"></TextBlock>
</DataTemplate>
</ListView.ItemTemplate>
</ListView>
// this not updated
<ListView ItemsSource="{Binding ActualSelectedDescription.Images}">
<ListView.ItemTemplate>
<DataTemplate>
<Image Source="{Binding NormalUri}" />
</DataTemplate>
</ListView.ItemTemplate>
</ListView>
<TextBlock Text="{Binding ActualSelectedDescription.Name}"/> //This is works well
ActualSelectedDescription由事件更改。
public TaxonDescription ActualSelectedDescription
{
get{return actualSelectedDescription;}
set { actualSelectedDescription = value;
RaisePropertyChanged("ActualSelectedDescription"); }
//In the setter the Images are in the list
}
Images 列表中有list元素
有Description类,带有列表。
class TaxonDescription
{
public List<BaseImage> Images { get; private set; }
public string Name { get; private set; }
public TaxonDescription(string taxonName, string descriptionName)
{
Name = taxonName;
Images = new List<BaseImage>();
//Adding some element
}
}
任何准确的想法都可以提供帮助,我会全部尝试;)
答案 0 :(得分:0)
ActualSelectedDescription.Images
没有变更通知。
尝试添加Images
属性的通知。
如果无法做到这一点,请将Images
设为ObservableCollection<BaseImage>
。
如果这是一个问题,请尝试将数据上下文设置为通知属性:
// this should start updating
<ListView DataContext="{Binding ActualSelectedDescription}"
ItemsSource="{Binding Images}">
<ListView.ItemTemplate>
<DataTemplate>
<Image Source="{Binding NormalUri}" />
</DataTemplate>
</ListView.ItemTemplate>
</ListView>
注意到TaxonDescription
不是public
- 这是SO中的拼写错误还是您实际代码中的私有类?
因为如果它是私有的,ItemsSource="{Binding ActualSelectedDescription.Images}"
将无效,因为无法访问Images
属性。