У меня есть длительная операция обработки , и для этого она должна быть выполнена в backGround, но проблема в следующем:
- Когда я создаю пользовательский элемент управления,и затем добавьте его в пользовательский интерфейс, (listView) элемент управления, WPF не показывает UC (пользовательский элемент управления), но listView, кажется, заполнен тем же числом UC, которое я создал.
Я использовал backgroundWorker, затем я использовал Dispatcher из listView, затем основной Dispatcher, , но все с той же проблемой
Интересно, могу ли я использовать для этого UIThread, но яне знаю как.
Мой код:
private void btn_click(object sender, System.Windows.RoutedEventArgs e)
{
string path = fileSourcesCombo.SelectedItem.ToString();
converter = getConverter(path);
this.Dispatcher.BeginInvoke(new Action(delegate()
{
System.Data.DataTable dataTable = converter.getDataTable();
dataGrid.Dispatcher.Invoke(new Action(delegate()
{
dataGrid.ItemsSource = dataTable.DefaultView;
}
));
List<MyAttribute> attributes = converter.attributes;
foreach (MyAttribute attribute in attributes)
{
string name = attribute.name;
string type = attribute.type;
CustomAttribute customAtt = new CustomAttribute(name, type);
ListViewControl.Dispatcher. Invoke(new Action(delegate() { ListViewControl.Items.Add(customAtt); }));
}
}
),System.Windows.Threading.DispatcherPriority.Background);
}
- Converter.getDataTable () занимает много времени.
- dataGrid.Dispatcer.Invoke работает правильно, потому чтоэто обновляет и захватывающий контроль.
- ListViewControl.Dispatcher, кажется, не работает должным образом, ни this.Dispatcher
, как я уже говорил, не генерируется ошибка компиляции, простовид списка, кажется, заполнен пустымэлементы на всех методах, которые я пробовал.
РЕДАКТИРОВАТЬ:
, когда я изменил ListView в ListItem, он работал, но я не знаю, почему ??как бы мне ни хотелось использовать вместо этого элемент управления listView ..
Это код Xaml, в котором он работает:
<Grid Margin="8,0">
<ListView x:Name="testpanel" Margin="8" BorderThickness="0" DisplayMemberPath="" Style="{DynamicResource SimpleListBox}" ItemContainerStyle="{DynamicResource SimpleListBoxItem}">
</ListView>
</Grid>
, если я удалю DynemicResource из: ItemContainerStyle,это не работает