Silverlight 不使用dispatcher时的奇怪行为

Silverlight 不使用dispatcher时的奇怪行为,silverlight,windows-phone-7,multithreading,Silverlight,Windows Phone 7,Multithreading,我知道无论何时您试图从不同的线程访问UI元素,我们都必须使用dispatcher,但今天我遇到了一些我想问的问题。假设我有一个用类行(自定义类)的对象填充的列表,并且每一行都用单元格(自定义类)填充。每个单元格都有一个属性CellWidth。我在ViewModel中填充一个列表,然后将其传递给View,在那里我从列表中进行ObservableCollection。网格的宽度绑定到UI中的CellWidth。所以,若我不使用Dispatcher(在ViewModel内部)设置宽度,Grid会忽略绑

我知道无论何时您试图从不同的线程访问UI元素,我们都必须使用dispatcher,但今天我遇到了一些我想问的问题。假设我有一个用类行(自定义类)的对象填充的列表,并且每一行都用单元格(自定义类)填充。每个单元格都有一个属性CellWidth。我在ViewModel中填充一个列表,然后将其传递给View,在那里我从列表中进行ObservableCollection。网格的宽度绑定到UI中的CellWidth。所以,若我不使用Dispatcher(在ViewModel内部)设置宽度,Grid会忽略绑定,但若我使用它,一切正常。(注意:不使用dispatcher时不会引发异常)

问题是:为什么会这样?我认为调度程序地址的唯一问题是线程

    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];
           }
       }
    });
}
publicMainPageViewModel()
{
IDataTableModel Table1=新的ObservableCollection();
设置单元格宽度(表1);
}
私有void setCellWidth(IDataTableModel模型)
{
列表宽度=新列表();
//使用值初始化宽度
Deployment.Current.Dispatcher.BeginInvoke(()=>
{
foreach(model.Rows中的var项)
{

对于(int i=0;iSo)您的实际问题是什么?“我在ViewModel中填充一个列表,然后将其传递给View,在那里我从列表中进行ObservableCollection”……听起来不像是一种非常MVVM的方式……您能提供代码吗?您的CellWidth属性是否正确触发PropertyChanged事件?