繁体   English   中英

分派器不会更新ListBox控件

[英]Dispatcher doesn't update ListBox control

这是ListBox本身:

...
    <Window.Resources>
        <DataTemplate x:Key="ListBoxTemplate" DataType="ArticlesApp:Article">
            <StackPanel Margin="6, 10, 0, 0" Height="45">
                <DockPanel>
                    <TextBlock Text="{Binding Title}" FontWeight="Bold"/>
                </DockPanel>
                <DockPanel>
                    <TextBlock Text="{Binding Author, StringFormat='by {0}'}"/>
                </DockPanel>
            </StackPanel>
        </DataTemplate>
    </Window.Resources>
...
<ListBox Grid.Row="0" x:Name="ListBox" SelectionChanged="ListBox_OnSelectionChanged" Background="#444444" SelectionMode="Single" ItemTemplate="{StaticResource ListBoxTemplate}"/>

而Dispatcher在后面的代码中:

        public ArticlesView()
        {
            InitializeComponent();

            ...

            Dispatcher?.BeginInvoke(new Action(() => { ListBox.ItemsSource = GetArticles(); }), DispatcherPriority.Background);
        }

        public static List<Article> GetArticles()
        {
            var articles = new List<Article>();

            foreach (string file in Directory.GetFiles("articles", "*.json", SearchOption.AllDirectories))
            {
                File.OpenText(file);

                articles.Add(JsonConvert.DeserializeObject<Article>(File.ReadAllText(file)));
            }

            return articles;
        }

它可以在应用程序启动时工作,将ListBox ItemSource分配给GetArticles ,但是如果有任何更改,它什么也不做。

代替使用List,使用ObservableCollection,这样无论何时更改源,它都会自动触发INotifyPropertyChange和INotifyCollectionChange,而itemsource将从集合中重新获取。

public static ObservableCollection<Article> GetArticles()
    {

        var articles = new ObservableCollection<Article>();

        foreach (string file in Directory.GetFiles("articles", "*.json", SearchOption.AllDirectories))
        {
            File.OpenText(file);
            articles.Add(JsonConvert.DeserializeObject<Article>(File.ReadAllText(file)));
        }

        return articles;
    }

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM