簡體   English   中英

堆棧面板子項未動態添加

[英]Stack panel child not being added dynamically

我犯了某種沒有帶來錯誤或警告但讓我感到沮喪的東西。 我的知識水平是新手,所以請多多包涵。

在編寫一個小型WPF應用程序以從Twitch獲取數據時,我需要一個堆棧面板,該面板可以動態地將用戶控件添加為子控件,但是執行代碼時,堆棧面板中沒有任何內容。

我以為問題可能是添加子項的調用來自另一個線程,但是經過測試,即使在同一線程上,添加也無法正常工作。

我以前從來沒有在應用程序中使用過用戶控件,所以我很好奇這是否是問題所在,但是經過將近兩天的嘗試找到問題后,我才來到這里。 我知道它一定是一個簡單的錯誤。 如果我的代碼在這里難以閱讀,請提前道歉-為變量和方法使用長的描述性名稱。

這是代碼:

首先,應用程序的辛苦工作是在單獨的線程上完成的,如下所示:

Thread main_work_thread = new Thread(new ThreadStart(do_main_work));
main_work_thread.IsBackground = false;
main_work_thread.Start();

通過石英作業將孩子添加到面板中(觸發器按預期工作):

 public virtual void Execute(IJobExecutionContext context)
    {
        List<twitch_api.Stream> online_streamers = App.twitch_interface.get_followed_channels_data().streams;

        foreach (twitch_api.Stream streamer in online_streamers)
        {

            // ...collect data


            // display data in window
            App.Current.Dispatcher.Invoke((Action)(() =>
            {
                ((MainWindow)App.Current.MainWindow).favourite_streamer_stack_clear();
                ((MainWindow)App.Current.MainWindow).add_streamer_to_favourite_stack(streamer_detail);
            }));
        }

    }

以下是在MainWindow內部調用的方法:

public void add_streamer_to_favourite_stack(favourite_streamer_list_item_data new_streamer)
    {
        favourite_streamer_stack.Children.Add(new favourite_streamer_list_item_control(new_streamer));
    }

    public void favourite_streamer_stack_clear()
    {
        favourite_streamer_stack.Children.Clear();
    }

這是我要添加的用戶控件背后的代碼:

 public partial class favourite_streamer_list_item_control : UserControl
{
   public favourite_streamer_list_item_data my_streamer_data { get; set; }

    public favourite_streamer_list_item_control()
    { 
        InitializeComponent();
    }

    public favourite_streamer_list_item_control(favourite_streamer_list_item_data new_streamer_data)
    {
        this.my_streamer_data = new_streamer_data;
    }

    private void favourite_streamer_stack_item_Loaded(object sender, RoutedEventArgs e)
    {
        // update controls with the data
        this.streamer_avatar.Source = my_streamer_data.streamer_logo_bitmap;
        this.textblock_streamer_name.Text = my_streamer_data.streamer_name;
        this.textblock_game.Text = my_streamer_data.stream_game;
        this.textblock_title.Text = my_streamer_data.stream_title;
    }
}

非常感謝您的寶貴時間。

您需要調用InitializeComponent(); 在您的無參數構造函數中。 沒有此調用,控制器將無法呈現。

public favourite_streamer_list_item_control(favourite_streamer_list_item_data new_streamer_data)
{
    InitializeComponent();
    this.my_streamer_data = new_streamer_data;
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM