C# 绑定对象的可观察集合问题

C# 绑定对象的可观察集合问题,c#,wpf,mvvm,C#,Wpf,Mvvm,我正在尝试编写一个rssreader,希望能得到一些架构提示。 我的阅读器主窗口有两个加载到框架中的wpf页面,它是一个“底部栏”,用户可以在这里选择不同的rss提供商。主框架(或页面)中是我的listview。 由于加载动画和UI冻结,我有一个额外的类,其中有一个backgroundworker,它用RSS数据填充可观察的集合,当我调试时,它会正确地填充我的集合。 在主页面中,我将datacontext设置为这个可观察的集合,但listview没有显示任何内容,这里我被卡住了 这就是我所拥有的

我正在尝试编写一个rssreader,希望能得到一些架构提示。 我的阅读器主窗口有两个加载到框架中的wpf页面,它是一个“底部栏”,用户可以在这里选择不同的rss提供商。主框架(或页面)中是我的listview。 由于加载动画和UI冻结,我有一个额外的类,其中有一个backgroundworker,它用RSS数据填充可观察的集合,当我调试时,它会正确地填充我的集合。 在主页面中,我将datacontext设置为这个可观察的集合,但listview没有显示任何内容,这里我被卡住了

这就是我所拥有的:

主页XAML:

> <ListBox ItemsSource="{Binding}" DisplayMemberPath="RssTitle"
> IsSynchronizedWithCurrentItem="True"
> SelectionChanged="itemsList_SelectionChanged"
> ItemContainerStyle="{DynamicResource listboxitem_style}" Height="396"
> HorizontalAlignment="Left" Margin="126,12,0,0" Name="ListBox1"
> VerticalAlignment="Top" Width="710"></ListBox>

ListBox1.DataContext = GetRssItems.observable_list;
GetRssItems.cs

public class GetRssItems
    {
        public static ObservableCollection<RSSItem> observable_collection { get; set; }
        public static string tmp_url;
        public BackgroundWorker worker = new BackgroundWorker();


        public void start_bg_worker(string url)
        {


            if (!worker.IsBusy)
            {

                worker.DoWork += new DoWorkEventHandler(worker_DoWork);
                worker.RunWorkerCompleted += new RunWorkerCompletedEventHandler(worker_RunWorkerCompleted);
                worker.RunWorkerAsync(url);
            }
        }
}
独立类RSSItem.cs

public class RSSItem
    {
         public string RssTitle { get; set; }
            public string RssLink { get; set; }
            public string RssDescription { get; set; }
            public string RsspubDate { get; set; }
            public string RssImageUrl { get; set; }

            public RSSItem(string rsstitle, string rsslink, string rssdescription, string rsspubdate, string rssimageurl)
            {
                RssTitle = rsstitle;
                RssLink = rsslink;
                RssDescription = rssdescription;
                RsspubDate = rsspubdate;
                RssImageUrl = rssimageurl;
            }
    }
谢谢你的时间和提示。 致以最诚挚的问候

请使用以下内容: 数据上下文应该是对象
getitems

<ListBox  ItemsSource="{Binding observable_collection}"  Height="167" Margin="0" Name="listBox1" Width="330" FontSize="24" HorizontalAlignment="Center" VerticalAlignment="Top">
                    <ListBox.ItemTemplate>
                        <DataTemplate>
                            <StackPanel Orientation="Horizontal">
                                <TextBlock Text="{Binding RssTitle}"  FontWeight="Bold" FontSize="16" />
                                <TextBlock Text="{Binding RssLink}"  FontSize="16"/>
                            </StackPanel>
                        </DataTemplate>
                    </ListBox.ItemTemplate>
                </ListBox>

附言: 您的命名为HORRBILE

请使用以下命令: 数据上下文应该是对象
getitems

<ListBox  ItemsSource="{Binding observable_collection}"  Height="167" Margin="0" Name="listBox1" Width="330" FontSize="24" HorizontalAlignment="Center" VerticalAlignment="Top">
                    <ListBox.ItemTemplate>
                        <DataTemplate>
                            <StackPanel Orientation="Horizontal">
                                <TextBlock Text="{Binding RssTitle}"  FontWeight="Bold" FontSize="16" />
                                <TextBlock Text="{Binding RssLink}"  FontSize="16"/>
                            </StackPanel>
                        </DataTemplate>
                    </ListBox.ItemTemplate>
                </ListBox>

附言:
您的命名是HORRBILE

您需要读取一点MVVM以从WPF中获得最大的好处。您的行设置listbox的datacontext相当混乱

您应该将主窗口(xaml)的数据上下文设置为包含可观察集合的视图模型类。列表框的ItemsSource设置为该属性名称

例如:

public class MainViewModel : INotifyPropertyChanged
{
   public ObservableCollection<RSSItem> RSSItems
   {
      get;
      set;
   }
   // Other stuff applicable to the main window.
}
public类主视图模型:INotifyPropertyChanged
{
公共可观测收集站点
{
得到;
设置
}
//其他适用于主窗口的内容。
}
构建视图时,将MainViewModel的实例传递给其DataContext。那么列表框的Xaml将是:

<ListBox ItemsSource={Binding Path=RSSItems} ... />


如果希望能够设置/更改RSSItems集合实例(即公共setter),则应使用NotifyPropertyChanged事件设置它的setter,但是,如果只是添加/删除项,则不需要这样做。(即加载并填充构造函数中的项。)

您需要读取一位MVVM,以从WPF中获得最大的好处。您的行设置listbox的datacontext相当混乱

您应该将主窗口(xaml)的数据上下文设置为包含可观察集合的视图模型类。列表框的ItemsSource设置为该属性名称

例如:

public class MainViewModel : INotifyPropertyChanged
{
   public ObservableCollection<RSSItem> RSSItems
   {
      get;
      set;
   }
   // Other stuff applicable to the main window.
}
public类主视图模型:INotifyPropertyChanged
{
公共可观测收集站点
{
得到;
设置
}
//其他适用于主窗口的内容。
}
构建视图时,将MainViewModel的实例传递给其DataContext。那么列表框的Xaml将是:

<ListBox ItemsSource={Binding Path=RSSItems} ... />


如果希望能够设置/更改RSSItems集合实例(即公共setter),则应使用NotifyPropertyChanged事件设置它的setter,但是,如果只是添加/删除项,则不需要这样做。(即加载并填充构造函数中的项。)

哦,你说得对,现在命名真的很可怕。您回答时试图更改我的列表框,但无效。绑定属性中的可观察_集合是否已知?@nukleos从未编写过命名错误的代码,即使它是5行代码,可供一次使用。在再次阅读有关MVVM模式的内容后,我建议您签出MVVMLight或Prism框架。这会帮你们省去很多麻烦。哦,你们说得对,现在命名真的很可怕。您回答时试图更改我的列表框,但无效。绑定属性中的可观察_集合是否已知?@nukleos从未编写过命名错误的代码,即使它是5行代码,可供一次使用。在再次阅读有关MVVM模式的内容后,我建议您签出MVVMLight或Prism框架。将为您省去很多麻烦。感谢您的提示,目前正在阅读一些关于MVVM的文章。Regard感谢您的提示,目前正在阅读一些关于MVVM的文章。问候