ListView

时间:2018-02-19 20:01:58

标签: uwp windows-10 mvvm-light windows-10-universal

所以我试图设计一个列表视图,其中每个项目都有一个复选框,绑定到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我也绑定了?

非常感谢!

1 个答案:

答案 0 :(得分:1)

您需要注意POST **************.wsdl HTTP/1.1 Host: ************************ Connection: Keep-Alive User-Agent: PHP-SOAP/5.6.31 Content-Type: text/xml; charset=utf-8 SOAPAction: "" Content-Length: 989 仅在每个绑定元素都实现了DataBinding接口时才有效。

意思是,如果您将复选框绑定到INotifyPropertyChanged类的Selected属性,则还需要将Campus添加到INotifyPropertyChanged类本身。

当您更改Selected属性的值时,它将自动在UI中反映此更改。

代码解决方案 我将以下内容添加到校园课程中以解决问题:

Campus