【问题标题】:How to disable deselection of items in ListView?如何禁用取消选择 ListView 中的项目?
【发布时间】:2017-01-09 01:37:15
【问题描述】:

我有

<ListView SelectionMode="Single" SelectedIndex="0" ItemsSource="{Binding AccountViewModels}" SelectedItem="{Binding SelectedItem}" Style="{StaticResource AccountsList}">
            <ItemsControl.ItemTemplate>
                <DataTemplate>
                    <LocalViews:AccountView Margin="{StaticResource ControlMargin}" />
                </DataTemplate>
            </ItemsControl.ItemTemplate>
        </ListView>

有没有办法禁止从 ListView 中取消选择项目(即ctrl+click)?换句话说,我不希望用户能够取消选择一个项目,但当然可以选择另一个项目。

【问题讨论】:

标签: wpf xaml


【解决方案1】:

由于此功能纯粹与视图/控件相关,因此不应在视图模型中实现,但您可以像这样处理 ListBoxItem 容器的 PreviewMouseLeftButtonDown 事件:

<ListView SelectionMode="Single" SelectedIndex="0" ItemsSource="{Binding AccountViewModels}" SelectedItem="{Binding SelectedItem}" Style="{StaticResource AccountsList}">
    <ListBox.ItemContainerStyle>
        <Style TargetType="ListBoxItem">
            <EventSetter Event="PreviewMouseLeftButtonDown" Handler="ItemPreviewMouseLeftButtonDown" />
        </Style>
    </ListBox.ItemContainerStyle>
    <ItemsControl.ItemTemplate>
        <DataTemplate>
            <LocalViews:AccountView Margin="{StaticResource ControlMargin}" />
        </DataTemplate>
    </ItemsControl.ItemTemplate>
</ListView>

private void ItemPreviewMouseLeftButtonDown(object sender, MouseButtonEventArgs e)
{
    ListBoxItem lbi = sender as ListBoxItem;
    e.Handled = lbi.IsSelected;
}

【讨论】:

    【解决方案2】:

    处理此问题的一种方法是使用绑定并添加逻辑以禁止在视图模型中取消选择。

    this answer,更改 IsSelected 如下:

    private bool isSelected;
    
    public bool IsSelected
    {
        get { return isSelected; }
        set
        {
            if (value && !isSelected)
            {
                isSelected = value;
                RaisePropertyChanged("IsSelected");
            }
        }
    }
    

    【讨论】:

      猜你喜欢
      • 2021-10-29
      • 2015-10-19
      • 2013-07-19
      • 1970-01-01
      • 2018-07-21
      • 2011-07-02
      • 1970-01-01
      • 2014-01-22
      • 1970-01-01
      相关资源
      最近更新 更多