[英]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.