我正在尝试将 ObservableCollection 绑定到 ListBox。调试的输出没有显示任何绑定错误,但由于某种原因它不起作用。
xml:
<Window
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:local="clr-namespace:nwsfeed"
x:Class="nwsfeed.MainWindow"
DataContext="{Binding RelativeSource={RelativeSource Self}}"
x:Name="Window">
<ListBox x:Name="listBoxChannels"
ItemsSource="{Binding ElementName=Window, Path=App.ActiveProfile.Feeds}"
DisplayMemberPath="Title"/>
</Window>
代码:
public partial class MainWindow : Window {
public NwsfeedApp App { get; set; }
// ..
}
public sealed class NwsfeedApp {
public UserProfile ActiveProfile { get; set; }
//..
}
public class UserProfile {
private ObservableCollection<RSSFeed> feeds;
public ObservableCollection<RSSFeed> Feeds { get { return feeds; } }
//..
}
编辑:问题是,当我将 ObservableCollection 作为 MainWindow 的公共属性并像这样绑定它时,它可以工作:
ItemsSource="{Binding ElementName=Window, Path=Items, Mode=OneWay}"
但是当我这样做时,它不会:
ItemsSource="{Binding ElementName=Window, Path=App.ActiveProfile.Feeds, Mode=OneWay}"
edit2 我在 App、ActiveProfile 和 Feeds 属性中实现了 INotifyPropertyChanged。ListBox 仍然不能反映集合的变化,除非我在它上面调用 .Items.Refresh() 。
有什么建议么?谢谢。