【发布时间】:2014-08-11 22:31:14
【问题描述】:
好的,这里有几个问题
第一
这是我的实现,但在 atm 不工作我怎样才能让它工作?
<Grid> // xaml part
<Button Content="Start Crawling Root Sites - This Deletes All Data" HorizontalAlignment="Left" Margin="10,10,0,0" VerticalAlignment="Top" Width="279" Command="{Binding StartCrawling}" Click="click_start_Crawling" />
<ListBox Name="lstBoxEvents" HorizontalAlignment="Left" Height="138" Margin="294,10,0,0" VerticalAlignment="Top" Width="312">
<ListBox.ItemTemplate>
<DataTemplate>
<Grid Margin="1">
<Grid.ColumnDefinitions>
<ColumnDefinition Width="Auto" />
</Grid.ColumnDefinitions>
<TextBlock Grid.Column="1" Text="{Binding ocEvents}" />
</Grid>
</DataTemplate>
</ListBox.ItemTemplate>
</ListBox>
</Grid>
private void click_start_Crawling(object sender, RoutedEventArgs e) // inside mainwindow
{
PublicStaticFunctions.AddMsgToEvents("trial");
}
public static class PublicStaticFunctions // seperate class
{
public static ObservableCollection<string> ocEvents = new ObservableCollection<string>();
public static void AddMsgToEvents(string srMessage)
{
ocEvents.Insert(0, srMessage);
}
}
我在运行多线程时的第二个问题,如果多个线程访问 AddMsgToEvents 函数并添加变量,列表框是否仍会自动刷新而没有任何问题?
非常感谢
【问题讨论】:
-
到底是什么问题? ListBox 需要有一个
ItemsSource。只要源是ObservableCollection,它就应该在添加/删除时将更改传播到 UI。 -
@PoweredByOrange 仍然无法正常工作 fc03.deviantart.net/fs71/f/2014/223/5/5/… 未更新
-
ItemSource={binding ocEvents} -
@PoweredByOrange 也不起作用
标签: c# wpf multithreading binding listbox