不使用调度程序时的奇怪行为

时间:2012-06-29 07:36:34

标签: silverlight windows-phone-7 multithreading

我知道每当你尝试从不同的线程访问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];
           }
       }
    });
}

0 个答案:

没有答案