在数据总体上更改MVVM DataTemplate的单元格

时间:2017-02-27 19:49:24

标签: c# xamarin mvvm

编辑:似乎问题是因为DataTemplate不会再次运行,即使它已被调用。当我第二次调用DataTemplate时,如何强制运行DataTemplate?

我有一个列表视图,其中每一行都是一个复选框和一个标签。如果用户选择标签或复选框,则激活该复选框并将该项添加到selectedList。在此列表视图之外,还有其他方法可以添加/删除此列表中的项目。

当列表视图被激活并显示时,我希望selectedList上的当前项显示为已选中。我可以通过运行selectedList和所有项之间的比较来做到这一点,如果两者都存在,我检查它。

这是问题所在。标签文本是一个可绑定属性,因此在数据模板初始化期间它不可用(因此我无法检查它的值是否在selectedItem的列表中)。下面的代码在listview第一次显示时工作(我也试过ChildAdded,但没有工作)。

cell.Appearing += (s, e) =>
                {
                    foreach (FloorDetailsViewModel floor in _viewModel.SelectedFloorsList)
                    {
                        if (floor.Name == label.Text)
                            checkBox.Source = activeImage;
                    }
                }; 

enter image description here

是否有办法在

时始终运行该比较代码

2 个答案:

答案 0 :(得分:0)

您无法通过调用它来手动重新运行DataTemplate。您必须将DataTemplate的ItemSource设置为null,然后将其设置回新值。这应该导致整个DataTemplate刷新。我不知道为什么你必须这样做..但那是你怎么做的。

答案 1 :(得分:0)

我认为你错了。您应该有一个Bindable CheckBox,这样您就不必在MVVM之外做任何事情(根据模型中的某些值,将自动选中或取消选中该复选框)