Как отобразить флажок на выбранный элемент ListView в UWP - PullRequest
0 голосов
/ 26 декабря 2018

У меня есть просмотр списка в uwp, где я должен выделить выбранный элемент, установив флажок на выбранном элементе.Поэтому, пожалуйста, расскажите мне, как я этого добился.

   My XAML code    

  <ListView x:Name="gvProcesses"  SelectionChanged="GvProcesses_SelectionChanged" Grid.Row="1" Grid.ColumnSpan="2" Height="100"  ItemsSource="{Binding ScanProcessNameCollection,Mode=OneWay}" SelectedItem="{Binding SelectedScanProcessName,Mode=TwoWay}"   IsItemClickEnabled="True" SelectionMode="Single"  ScrollViewer.HorizontalScrollBarVisibility="Auto" ScrollViewer.HorizontalScrollMode="Enabled" ScrollViewer.IsHorizontalRailEnabled="True" >
                <ListView.ItemsPanel>
                    <ItemsPanelTemplate>
                        <!--<StackPanel Orientation="Horizontal" />-->
                        <ItemsStackPanel Orientation="Horizontal" Margin="0"/>
                    </ItemsPanelTemplate>
                </ListView.ItemsPanel>
                <ListView.ItemTemplate>
                    <DataTemplate >

                        <StackPanel Background="{ThemeResource SystemControlBackgroundAccentBrush}" >
                            <TextBlock  Visibility="{Binding IsSelected,Mode=TwoWay, RelativeSource={RelativeSource Mode=TemplatedParent}, Converter={StaticResource BooleanToVisibilityConverter}}" 
                                        x:Name="txtcheckbox" FontFamily="Segoe MDL2 Assets" Text="&#xE73A;"  FontSize="{ StaticResource SmallFontSize}" VerticalAlignment="Center"  HorizontalAlignment="Left"></TextBlock>
                            <TextBlock Text="{Binding}" FontSize="{ StaticResource SmallFontSize}" VerticalAlignment="Center" TextWrapping="WrapWholeWords"  Margin="0 40" HorizontalAlignment="Center"></TextBlock>
                        </StackPanel>
                    </DataTemplate>
                </ListView.ItemTemplate>
                <ListView.ItemContainerStyle>
                    <Style TargetType="ListViewItem">
                        <Setter Property="HorizontalContentAlignment" Value="Stretch" />
                        <Setter Property="VerticalContentAlignment" Value="Stretch" />
                        <Setter Property="Margin" Value="2,0,2,0"  />
                        <Setter Property="Padding" Value="0,0,0,0"  />
                        <Setter Property="MinHeight" Value="50"  />
                        <Setter Property="MaxHeight" Value="100"  />
                        <Setter Property="MaxWidth" Value="80"  />

                    </Style>
                </ListView.ItemContainerStyle>
            </ListView>

Флажки отображаются на всех элементах, привязка не работает должным образом, и она также не идет на конвертере, когда я отлаживаю его.

1 Ответ

0 голосов
/ 26 декабря 2018

Режим выбора Несколько

Если вам нужно несколько выбор с флажком, то вы можете изменить свойство SelectionMode на Multiple, а затем установить IsMultiSelectCheckBoxEnabled на True

Режим выделения одиночный

Если вам нужен одиночный выбор с флажком, вам нужно добавить флажок к вашей сетке, а затем связать его с проверяемым.Я добавил небольшой пример ниже

// Xaml Code

<ListView ItemsSource="{x:Bind line_items,Mode=OneWay}"  SelectionChanged="ListView_SelectionChanged">
        <ListView.ItemTemplate>
            <DataTemplate>
                <StackPanel Orientation="Horizontal">
                    <CheckBox IsChecked="{Binding is_checked,Mode=OneWay}"></CheckBox>
                    <TextBlock Text="{Binding value,Mode=OneWay}"></TextBlock>
                </StackPanel>
            </DataTemplate>
        </ListView.ItemTemplate>
    </ListView>

// C # Code

public sealed partial class MainPage : Page
    {
        public List<item> line_items = new List<item>();
        public MainPage()
        {
            for (var i = 0; i < 10; i++)
                line_items.Add(new item() { is_checked = false, value = "item" + i });
            this.InitializeComponent(); 
        }

        private void ListView_SelectionChanged(object sender, SelectionChangedEventArgs e)
        {
            foreach(var item in line_items)
                item.is_checked = false;
            line_items[(sender as ListView).SelectedIndex].is_checked = true;
        }
    }
    public class item : INotifyPropertyChanged
    {
        private bool? _is_checked;
        private string _value;

        public bool? is_checked
        {
            get { return _is_checked; }
            set
            {
                _is_checked = value;
                RaisePropertyChanged(nameof(is_checked));
            }
        }

        public string value
        {
            get { return _value; }
            set
            {
                _value = value;
                RaisePropertyChanged(nameof(value));
            }
        }
        public event PropertyChangedEventHandler PropertyChanged;
        protected void RaisePropertyChanged(string name)
        {
            if (PropertyChanged != null)
            {
                PropertyChanged(this, new PropertyChangedEventArgs(name));
            }
        }
    }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...