我正在尝试将ObservableCollection绑定到ListBox。 调试输出没有显示任何绑定错误,但由于某种原因它不起作用。
XAML:
<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()。
有什么建议吗?感谢。
答案 0 :(得分:1)
在您的课程上实施INotifyPropertyChanged。
答案 1 :(得分:0)
由于缺乏信息,这是一个黑暗的镜头:
您正在尝试访问App
,这是一个静态应用程序属性,它不是窗口代码隐藏中的实例化变量。未评估绑定中其余的属性路径,因为无法找到App。
你可能想要这个:
ItemsSource="{x:Static local:App.ActiveProfile.Feeds}"
对于缺失的输出,请尝试Tools->Options->Debugging->Output window->WPF Trace Settings
,您可以选择查看有关可用WPF曲线的更多或更少信息。
HTH,
巴布。