How to SelectItem of ListView having GridView

Viewed 36

I want to select ListViewItem on Edit Button click of button, present in ListView inside GridView. Using MVVM Pattern.

Use case: Edit option in last column in GridViewColumn, on clicking edit button, I want to hide TextBlock and show TextBox, but to do this, I want to first selectItem of ListView on Edit Button's click In below code, I'm having ObservableCollection List,

User.cs is as below

private string _username;
        private string _password;
        private int _age;
        private string _city;
        public string Username { get => _username; set => _username = value; }
        public string Password { get => _password; set => _password = value; }
        public int Age { get => _age; set => _age = value; }
        public string City { get => _city; set => _city = value; }

        private bool _isEdit;
        public bool IsEdit
        {
            get { return _isEdit; }
            set
            {
                _isEdit = value;
                OnPropertyChanged(nameof(IsEdit));
            }
        }

        public User()
        {
            _username = String.Empty;
            _password = String.Empty;
            _city = String.Empty;
            _isEdit = true;
        }
        public User(string username, string password, int age, string city)
        {
            this._username = username;
            this._password = password;
            this._age = age;
            this._city = city;
            _isEdit = true;
        }

View File is as below

<ListView ItemsSource="{Binding List}"
              Grid.Row="1"
              SelectionMode="Single"
              SelectedItem="{Binding SelectedUser}"
              x:Uid="Table">
        <ListView.ItemContainerStyle>
            <Style TargetType="ListViewItem">
                <Setter Property="HorizontalContentAlignment"
                        Value="Center" />
                <Setter Property="VerticalContentAlignment"
                        Value="Center" />
                <Setter Property="IsSelected"
                        Value="{Binding IsEdit, Converter={StaticResource BoolToVisibilityConverter}, Mode=OneWay}" />
            </Style>
        </ListView.ItemContainerStyle>
        <ListView.View>
            <GridView>
                <GridViewColumn>
                    <GridViewColumnHeader Style="{StaticResource HeaderStyle}">
                        <ContentControl ContentTemplate="{StaticResource Header}"
                                        Content="Username" />
                    </GridViewColumnHeader>
                    <GridViewColumn.CellTemplate>
                        <DataTemplate>
                            <StackPanel>
                                <TextBlock Text="{Binding Username}" />
                                <TextBox Text="{Binding Username}"
                                         Visibility="{Binding IsEdit, Converter={StaticResource BoolToVisibilityConverter}}" />
                            </StackPanel>
                        </DataTemplate>
                    </GridViewColumn.CellTemplate>
                </GridViewColumn>
                <GridViewColumn>
                    <GridViewColumnHeader Style="{StaticResource HeaderStyle}">Age</GridViewColumnHeader>
                    <GridViewColumn.CellTemplate>
                        <DataTemplate>
                            <StackPanel>
                                <TextBlock Text="{Binding Age}" />
                                <TextBox Text="{Binding Age}"
                                         Visibility="{Binding IsEdit, Converter={StaticResource BoolToVisibilityConverter}}" />
                            </StackPanel>
                        </DataTemplate>
                    </GridViewColumn.CellTemplate>
                </GridViewColumn>
                <GridViewColumn>
                    <GridViewColumnHeader Style="{StaticResource HeaderStyle}">City</GridViewColumnHeader>
                    <GridViewColumn.CellTemplate>
                        <DataTemplate>
                            <StackPanel>
                                <TextBlock Text="{Binding City}" />
                                <TextBox Text="{Binding City}"
                                         Visibility="{Binding IsEdit, Converter={StaticResource BoolToVisibilityConverter}}" />
                            </StackPanel>
                        </DataTemplate>
                    </GridViewColumn.CellTemplate>
                </GridViewColumn>
                <GridViewColumn>
                    <GridViewColumnHeader Style="{StaticResource HeaderStyle}">Modify</GridViewColumnHeader>
                    <GridViewColumn.CellTemplate>
                        <DataTemplate>
                            <Button Content="Edit"
                                    Command="{Binding RelativeSource={RelativeSource Mode=FindAncestor, AncestorType=UserControl}, Path=DataContext.Edit}"
                                    CommandParameter="{Binding RelativeSource={RelativeSource Mode=FindAncestor, AncestorType=ListView}, Path=ListViewItems}"/>
                        </DataTemplate>
                    </GridViewColumn.CellTemplate>
                </GridViewColumn>
            </GridView>
        </ListView.View>
    </ListView>
1 Answers

To select an item from code you need to set the Property that is bound to "SelectedItem" and then call a NotifyChange.

In your case it would be inside the Button Click-Event:

SelectedUser=yourItem;
NotifyChange(nameof(SelectedUser))
Related