这里有很多关于使用后台工作线程更新控件(主要是ObservableCollection
)的问题。我正在尝试实施this solution。但是,我的情况稍微深一点,因为它调用add方法中的一个函数来返回要添加的对象。
这就是我的解决方案现在的样子(请注意我的ObservableCollection
绑定了TreeView
控件):
//Pass from Background Thread
MainTreeViewModel.AddLocation(locationName, locationValue);
//UI Thread (MainTreeViewModel)
public void AddLocation(MultiItemString displayName, int locationValue)
{
var node = Data.GetAllChildren(x => x.Children).Distinct().ToList().First(x => x.identify == 'P'); //Location Parent
App.Current.Dispatcher.BeginInvoke((Action)delegate()
{
node.Children.Add(CreateLocationNode(displayName, locationValue));
});
}
CreateLocationNode:
//Also location in MainTreeViewModel
private HierarchicalVM CreateLocationNode(MultiItemString displayName, int locationValue)
{
MultiItemString locationNumber = new MultiItemString(new[] {locationValue.ToString() + " "}, false);
var newLocationNode = new HierarchicalVM()
{
DisplayName = displayName, //Examples of props that turn out as NULL
LocationNumber = locationNumber,
TreeView_LocValue = locationValue,
Children = new ObservableCollection<HierarchicalVM>(), //This is what is being added to
Commands =
};
return newLocationNode;
}
执行此操作时,我发现添加了一个对象,但附加到它的所有属性都会收到空值。相反,当我在UI线程中执行所有操作并且只使用node.Children.Add(CreateLocationNode(displayName, locationValue));
时,所有内容都会附加它应该如何。为什么我在这里得到不同的结果,我该如何解决?
如果您需要更多代码,请与我们联系。