Silverlight 不使用dispatcher时的奇怪行为
我知道无论何时您试图从不同的线程访问UI元素,我们都必须使用dispatcher,但今天我遇到了一些我想问的问题。假设我有一个用类行(自定义类)的对象填充的列表,并且每一行都用单元格(自定义类)填充。每个单元格都有一个属性CellWidth。我在ViewModel中填充一个列表,然后将其传递给View,在那里我从列表中进行ObservableCollection。网格的宽度绑定到UI中的CellWidth。所以,若我不使用Dispatcher(在ViewModel内部)设置宽度,Grid会忽略绑定,但若我使用它,一切正常。(注意:不使用dispatcher时不会引发异常) 问题是:为什么会这样?我认为调度程序地址的唯一问题是线程Silverlight 不使用dispatcher时的奇怪行为,silverlight,windows-phone-7,multithreading,Silverlight,Windows Phone 7,Multithreading,我知道无论何时您试图从不同的线程访问UI元素,我们都必须使用dispatcher,但今天我遇到了一些我想问的问题。假设我有一个用类行(自定义类)的对象填充的列表,并且每一行都用单元格(自定义类)填充。每个单元格都有一个属性CellWidth。我在ViewModel中填充一个列表,然后将其传递给View,在那里我从列表中进行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];
}
}
});
}
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事件?