2

我正在尝试将 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() 。

有什么建议么?谢谢。

4

2 回答 2

1

在您的类上实施INotifyPropertyChanged 。

于 2012-04-18T11:09:43.540 回答
0

由于缺乏信息,这里有一个在黑暗中的镜头:

您正在尝试访问App哪个是静态应用程序属性,它不是窗口隐藏代码中的实例化变量。未评估绑定中的其余属性路径,因为找不到 App。

你可能想要这个:

ItemsSource="{x:Static local:App.ActiveProfile.Feeds}"

对于缺少的输出,请尝试Tools->Options->Debugging->Output window->WPF Trace Settings在此处查看有关可用 WPF 跟踪的更多或更少信息的选项。

高温下,

呸。

于 2012-04-18T11:18:23.913 回答