列表框未在用户控件wpf中更新

时间:2015-12-24 11:10:33

标签: c# wpf multithreading xaml listbox

我一直在努力争取在WPF中更新列表框。我有一个包含列表框的用户控件。然后我将此usercontrol嵌入另一个用户控件中。

public partial class MyClass : UserControl
{
    private Thread myThread;

    public MyClass()
    {
        InitializeComponent();
        this.DataContext = this;
    }

    ObservableCollection<String> sampleData = new ObservableCollection<String>();
    public ObservableCollection<String> SampleData
    {
        get
        {
            if (sampleData.Count <= 0)
            {
                sampleData.Add("1");
                sampleData.Add("2");
            }
            return sampleData;
        }
    }

    public void StartMyThread()
    {
        if (myThread == null)
        {
            myThread = new Thread(ThreadProgram);
            myThread.Start();
        }
    }

    private void UpdateFromThread(string text)
    {
        this.Dispatcher.Invoke((Action)(() =>
        {
            UpdateList(text);
        }));
    }

    private void UpdateList(string text)
    {       
         sampleData.Add(text);
    }

private void ThreadProgram()
{
    UpdateFromThread("my text");
    //other stuff
}

包含列表框的用户控件的我的XAML包含:

<Grid>
    <ListBox ItemsSource="{Binding Path=SampleData}"/>
</Grid>

和我嵌入我的控件的地方在这里:

<TabControl SelectionChanged="TabControl_SelectionChanged" Name="tabCtrl">
    <TabItem Header="MyListboxTab">
        <Service:MyClass Margin="0,0,-1,0"/>
    </TabItem>

它最初用“1”和“2”更新,我可以使用消息框来显示文本。我已经检查过了,我对列表框的更新肯定被调用了,它们只是不显示。

还值得注意的是,从点击按钮调用sampleData.Add("clicked");时列表会更新。

非常感谢任何帮助,谢谢。

0 个答案:

没有答案