【问题标题】:How to select an already selected gridview item again如何再次选择已经选择的gridview项目
【发布时间】:2021-06-14 15:11:34
【问题描述】:

我需要选择一个已经选择的 Gridview 项目。但是一旦选择它就不会第二次触发 PropertyChanged。我尝试将 SelectedIndex 重置为 -1 并将 SelectedItem 重置为 null。没有运气。 任何帮助将不胜感激。

<GridView
            x:Name="OrganizationsGridView"
            HorizontalAlignment="Center"
            ItemContainerStyle="{StaticResource GridViewItemStyle11}"
            ItemsSource="{Binding OrganizationsList}"
            SelectedIndex="{Binding SelectedIndex, Mode=Twoway}"
            SelectedItem="{Binding SelectedOrganization, Mode=Twoway, UpdateSourceTrigger=PropertyChanged}"
            Tag="{Binding OrganizationsList}">

【问题讨论】:

    标签: c# uwp win-universal-app uwp-xaml windows-10-universal


    【解决方案1】:

    您可以在 SelectionChanged 事件发生之前将 SelectedIndex 设置为 -1,这可以触发所选项目的 PropertyChanged 事件。同时,使用该方法会导致在选择item的过程中多次触发PropertyChanged事件。

    请参考以下代码。

    XAML 代码:

    <Page
       ..>
        <Grid>
                <GridView x:Name="gridview" ItemsSource="{x:Bind persons}"
                          SelectedIndex="{x:Bind SelectedIndex, Mode=TwoWay}"
                          IsItemClickEnabled="True"
                          ItemClick="gridview_ItemClick">
                    <GridView.ItemTemplate>
                        <DataTemplate x:DataType="local:Person">
                            <TextBlock Text="{x:Bind name}" FontWeight="Bold"  />
                        </DataTemplate>
                    </GridView.ItemTemplate>
                </GridView>           
        </Grid>
    </Page> 
    

    后面的代码:

    namespace SelectedGridview
    {
        public sealed partial class MainPage : Page,INotifyPropertyChanged
        {
            public ObservableCollection<Person> persons { get; set; }
            private int _SelectedIndex;
            public int SelectedIndex
            {
                get { return _SelectedIndex; }
                set
                {
                    _SelectedIndex = value;
                    RaisePropertyChanged("SelectedIndex");
                }
            }
            public MainPage()
            {
                this.InitializeComponent();
                persons = new ObservableCollection<Person>
                {
                    new Person(){name="Lily",age=45},
                    new Person(){name="tom",age=21},
                    new Person(){name="jack",age=37},
                    new Person(){name="loean",age=26},
                    new Person(){name="jojo",age=18}      
                
                };
             
            }
    
            public event PropertyChangedEventHandler PropertyChanged;
            public void RaisePropertyChanged([CallerMemberName] string propertyname = null)
            {
                PropertyChanged?.Invoke(this, new PropertyChangedEventArgs(propertyname));
                
            }     
    
            private void gridview_ItemClick(object sender, ItemClickEventArgs e)
            {
                SelectedIndex = -1;
            }    
        }
        public class Person
        {
            public string name { get; set; }
            public int age { get; set; }
        }
    }
    

    【讨论】:

    • 完美。 “gridview_ItemClick”成功了。非常感谢。
    猜你喜欢
    • 2014-06-10
    • 1970-01-01
    • 2013-12-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-12-23
    • 1970-01-01
    • 2011-11-08
    相关资源
    最近更新 更多