UWP如何处理多项选择

时间:2017-05-09 15:05:15

标签: listview uwp multipleselection

我正在开发一个应用程序,我需要从服务中提供一些选项,并从用户中捕获一些这些项目的选择。为了实现这一点,我尝试使用ListView和SelectionMode =" Multiple"但我发现这种方法存在一些麻烦。

Application picture

在上图中,当用户从左侧面板中选择一个项目(从这里我将称之为"插槽")时,右侧面板中将显示所选插槽的详细信息。我的问题是处理"处理类型"领域。如您所见,插槽可能有许多处理类型。我需要双向将ListView的SelectedItems属性绑定到我的ViewModel中的某个属性,但这是不可能的(顺便说一下,我遵循MVVM模式)。有一种方法可以从ViewModel设置所选项目,然后捕获用户可以返回到我的ViewModel的任何其他选择(或取消选择)。当然我更喜欢干净简单的解决方案,但此时任何建议都会受到赞赏

1 个答案:

答案 0 :(得分:0)

我们无法将Binding分配到UWP中的只读属性SelectedItems

作为一个wrokaround,我们可以在Class中定义IsSelected属性,Class应该继承INotifyPropertyChanged。

班级代码:

public class Bundle : INotifyPropertyChanged
{
    private string _name;
    private bool _isSelected;

    public string Name
    {
        get { return _name; }
        set
        {
            _name = value;
            RaisePropertyChanged("Name");
        }
    }

    public bool IsSelected
    {
        get { return _isSelected; }
        set
        {
            _isSelected = value;
            RaisePropertyChanged("IsSelected");
        }
    }

    public event PropertyChangedEventHandler PropertyChanged;

    protected void RaisePropertyChanged(string name)
    {
        if (PropertyChanged != null)
        {
            PropertyChanged(this, new PropertyChangedEventArgs(name));
        }
    }
}

我们可以将IsMultiSelectCheckBoxEnabled设为false,表示CheckBox不会显示。然后我们可以在CheckBox中添加DataTemplate控件,然后我们可以将IsChecked属性绑定到IsSelected

例如:

<ListView Name="MyListView" SelectionMode="Multiple"  IsMultiSelectCheckBoxEnabled="False">
    <ListView.ItemTemplate>
        <DataTemplate>
            <StackPanel Orientation="Horizontal">
                <CheckBox IsChecked="{Binding IsSelected,Mode=TwoWay}"></CheckBox>
                <TextBlock Text="{Binding Name}" ></TextBlock>
            </StackPanel>
        </DataTemplate>
    </ListView.ItemTemplate>
</ListView>