簡體   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