【发布时间】:2018-02-19 20:01:58
【问题描述】:
所以我试图设计一个列表视图,其中每个项目都有一个复选框,该复选框绑定到 MVVM Light 中的 bool 属性。我已将所有内容绑定并正常工作,但现在我想添加一个“全选”和“全选”按钮”。
列表视图
<ListView SelectionMode="None" ItemsSource="{x:Bind ViewModel.Campuses, Mode=OneWay}">
<ListView.ItemTemplate>
<DataTemplate x:DataType="data:Campus">
<StackPanel Orientation="Horizontal" HorizontalAlignment="Left">
<CheckBox IsChecked="{x:Bind selected, Mode=TwoWay}" Content="{x:Bind Name}" x:Name="checkBox"/>
</StackPanel>
</DataTemplate>
</ListView.ItemTemplate>
</ListView>
代码
private ObservableCollection<Campus> _campuses { get; set; }
public ObservableCollection<Campus> Campuses
{
get
{
return _campuses;
}
set
{
_campuses = value;
RaisePropertyChanged("Campuses");
}
}
因此绑定工作正常,并且自己选中该框会更改保存在对象中的值。但是,当我尝试以编程方式更改这些内容时,UI 不会更新,只会更新后面的代码。
我想怎么做
public void SelectAll()
{
foreach (var item in Campuses)
{
item.selected = true;
}
RaisePropertyChanged("Campuses");
}
目前的工作方式
public void SelectNone()
{
List<Campus> old = Campuses.ToList<Campus>();
foreach (var item in old)
{
item.selected = false;
}
Campuses = new ObservableCollection<Campus>(old);
}
有没有办法更改 ObservableCollection 中的所有值并在 ListView 中更新对象中的值,而无需完全重新分配 ObservableCollection 我也在绑定?
非常感谢!
【问题讨论】:
标签: uwp windows-10 mvvm-light windows-10-universal