我知道每当你尝试从不同的线程访问UI元素时我们必须使用调度程序,但今天我遇到了一些我想问的问题。假设我有一个填充了类Row(自定义类)对象的列表,并且每行都填充了Cell(自定义类)。每个Cell都有一个属性CellWidth。我在ViewModel中填充一个列表,然后将其传递给View,我在List中创建了ObservableCollection。网格的宽度绑定到UI中的CellWidth。因此,如果我设置的宽度不使用Dispatcher(在ViewModel中),Grid会忽略绑定,但是如果我使用它,一切都可以正常工作。 (注意:不使用调度程序时不会引发异常)
问题是:为什么会这样?我认为调度员地址的唯一问题是线程......
public MainPageViewModel()
{
IDataTableModel Table1 = new ObservableCollection<Row>();
setCellWidth(Table1);
}
private void setCellWidth(IDataTableModel model)
{
List<double> Widths = new List<double>();
//initializing Widths with values
<...>
Deployment.Current.Dispatcher.BeginInvoke(() =>
{
foreach(var item in model.Rows)
{
for(int i = 0; i<item.Cells.Count; i++)
{
item[i].CellWidth = Widths[i];
}
}
});
}