0

我知道每当您尝试从不同的线程访问 UI 元素时,我们都必须使用调度程序,但是今天我遇到了一些我想问的问题。假设我有一个列表,其中填充了 Row 类(自定义类)的对象,并且每一行都填充了 Cell(自定义类)。每个 Cell 都有一个属性 CellWidth。我在 ViewModel 中填充了一个列表,然后将其传递给 View,在其中我从 List 中创建 ObservableCollection。Grid 的宽度与 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];
           }
       }
    });
}
4

0 回答 0